INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
String in Array zerlegen
06.07.2015, 20:09 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2015 20:10 von tito-t.)
Beitrag #9
RE: String in Array zerlegen
ich sehe keine Speicher-Reservierung für deine string-Variablen, ich hätte Sorge, dass sie ins Nirwana schreiben. Ich würde sie vorab mit Größe definieren:
char te[20], tz[20], td[20] /*,....*/ ; // usw.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.07.2015, 20:19
Beitrag #10
RE: String in Array zerlegen
(06.07.2015 20:09)tito-t schrieb:  ich sehe keine Speicher-Reservierung für deine string-Variablen, ich hätte Sorge, dass sie ins Nirwana schreiben. Ich würde sie vorab mit Größe definieren:
char te[20], tz[20], td[20] /*,....*/ ; // usw.
Ich glaube, dass man das nicht muss. Die Zuweisungen zu te, tz etc. kopieren eh nur die Zeiger. Also würde es nichts nützen. Ich denke, strtok "zerhackt" den String (value) selbst. Versuche mal, danach value auszugeben.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.07.2015, 22:31 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2015 22:43 von tito-t.)
Beitrag #11
RE: String in Array zerlegen
ja, ich dachte auch, dass der Ausgangsstring value zerhackt wird.
Aber wo stehen dann die Hackstücke 'token' ? Die habe doch auch keinen reservierten Speicher?

char* token = strtok(value, ",");
char* te = token;
was doch nichts anderes ist als
char te[] = token;

auf die tokens werden dann die neuen Zeiger gesetzt, aber dann werden die Tokens ja sofort wieder überschrieben,
token= strtok(0, ",");
char* tz = token;

wo stehen dann also die Teilstrings?
Aber was überhaupt bedeutet die Null in token= strtok(0, ","); ?

Ehrlich gesagt, doch noch ne Menge Fragen. Huh

gerade sah ich bei c++Reference: die Null ist der Nullpointer!
Code:
char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
sieht aus, als bliebe der Ausgangsstring stehen wo er ist und wird gar nicht echt zerhackt, sondern es werden nur nacheinander Pointer auf bestimmte Zellen dieses Strings gesetzt, dann wird es ein wenig klarer!
Aber warum ein Nullpointer? hm.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 09:51
Beitrag #12
RE: String in Array zerlegen
(06.07.2015 22:31)tito-t schrieb:  ja, ich dachte auch, dass der Ausgangsstring value zerhackt wird.
Aber wo stehen dann die Hackstücke 'token' ? Die habe doch auch keinen reservierten Speicher?
Die stehen genau da, wo sie vorher auch standen. strtok ändert den ursprünglichen String. D.h. am Anfang hatten wir das hier:
"Hallo, mein, Name, ist, Louis\0"
Nach dem strtok steht an derselben Speicherstelle in etwa das hier:
"Hallo\0 mein\0 Name\0 ist\0 Louis\0"
(\0 steht jeweils für ein Byte mit dem Wert 0.)
...und die Zeiger te, tz usw. zeigen jeweils in diesen String.

Zitat:auf die tokens werden dann die neuen Zeiger gesetzt, aber dann werden die Tokens ja sofort wieder überschrieben,
token= strtok(0, ",");
char* tz = token;
Da wird gar nichts überschrieben, da ja nur die Zeiger kopiert werden und nicht die Inhalte.

Zitat:wo stehen dann also die Teilstrings?
Da, wo sie vorher auch standen.

Zitat:Aber was überhaupt bedeutet die Null in token= strtok(0, ","); ?
Das bedeutet soviel wie "mach mit dem String vom Anfang weiter, und zwar an der Stelle, wo wir das letzte mal waren. strtok verwendet dazu einfach eine static-Variable.

Zitat:Aber warum ein Nullpointer? hm.
Siehe oben. Ansonsten würde das Teil sozusagen wieder von vorne anfangen, aber da steht ja dann nur der String bis zum ersten Trennzeichen. (Da das erste Trennzeichen schon durch \0 ersetzt wurde.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 12:28
Beitrag #13
RE: String in Array zerlegen
aha! deshalb! danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  pinMode mit array luj1990 6 467 22.07.2017 10:24
Letzter Beitrag: Binary1
  String vergleichen georg01 15 654 18.07.2017 20:35
Letzter Beitrag: Tommy56
  String.charAt() ardun 3 264 02.07.2017 15:28
Letzter Beitrag: Tommy56
  Aus char string machen metzgefa 1 288 06.05.2017 15:15
Letzter Beitrag: Tommy56
  Array-Index zu groß: Tückisches Verhalten GuaAck 6 311 05.05.2017 22:03
Letzter Beitrag: Tommy56
  Array mit Serial.read befüllen Gonmaus 4 420 01.05.2017 09:13
Letzter Beitrag: Gonmaus
  String übergeben oOSpikeOo 9 497 28.03.2017 19:47
Letzter Beitrag: georg01
  Array länge oOSpikeOo 4 275 28.03.2017 18:57
Letzter Beitrag: oOSpikeOo
  String in tinygps++ einlesen hoko 17 940 07.03.2017 15:40
Letzter Beitrag: hoko
  String -> Char *gelöst* Binatone 2 474 31.01.2017 11:08
Letzter Beitrag: Binatone

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste