Kadaj Geschrieben 19. März 2012 Geschrieben 19. März 2012 Hallo, ich bin grade dabei ein Telefonbuch zu schreiben. Ich dachte auch, ich sei endlich fertig, bis ich zufällig einen Eintrag ohne Vorname eingegeben habe. Dann steht in meiner Ausgabedatei in einer Zeile: Klaus;;035247889 Wenn ich nun strtok aufrufe: if( i == 1 ) zeiger = strtok( puffer,";" ); /* für das erste Element */ else { printf("kurz vor strtok...\n"); zeiger = strtok( NULL,";\n" ); /* für 2. und 3. Element */ } [/PHP] dann bekomme ich einen Speicherzugriffsfehler, beim leeren Eintrag. puffer ist ein char, wo der ganze string, also: [PHP]Klaus;;035247889 drinne steht. Aber wie kann ich den Speicherzugriffsfehler von strtok umgehen, wenn zwei Trennzeichen hintereinander stehen? Hat jemand eine Idee?
Klotzkopp Geschrieben 20. März 2012 Geschrieben 20. März 2012 Der Fehler liegt nicht an strtok, sondern daran, was du mit dem Rückgabewert machst. strtok hat die Eigenschaft, Trennzeichenwiederholungen zu überspringen. Wenn du das nicht willst, solltest du den String nicht so zusammensetzen oder nicht strtok benutzen.
Kadaj Geschrieben 20. März 2012 Autor Geschrieben 20. März 2012 Achso, verstehe. Was macht denn strtok, wenn gleich am Anfang mein Trennzeichen steht? Also ;Hermann;23434 [/PHP] Springt er in dem Fall auch einfach weiter, oder gibt er einen Leerstring zurück? Immerhin folgen hier keine 2 Trennzeichen hintereinander. Der Fehler liegt nicht an strtok, sondern daran, was du mit dem Rückgabewert machst. Also ist es am besten, ich lasse garnicht erst zu, dass man Name oder Vorname nicht eingeben muss, oder gibt es eine bessere Lösung?
Klotzkopp Geschrieben 20. März 2012 Geschrieben 20. März 2012 Achso, verstehe. Was macht denn strtok, wenn gleich am Anfang mein Trennzeichen steht?Ein oder mehrere Trennzeichen am Anfang werden übersprungen. strtok würde also beim ersten Aufruf "Hermann" zurückgeben. Also ist es am besten, ich lasse garnicht erst zu, dass man Name oder Vorname nicht eingeben muss, oder gibt es eine bessere Lösung?Ich würde dir empfehlen, nicht strtok zu benutzen. Diese Funktion hat ein paar unangenehme Eigenschaften, wie z.B. dass sie den verarbeiteten String verändert und nicht ablaufinvariant ist.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden