Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Speicherzugriffsfehler bei strtok

Empfohlene Antworten

Veröffentlicht

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?

  • Autor

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?

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.