String-problem

Ich habe zwei Strings mittels

char substring[255], zeile[255];

definiert. jetzt hab ich per

strncpy (substring, &zeile[index], index2-index);

einen Teil von zeile in substring kopiert. Lasse ich das aber nochmal durchlaufen und wird dann ein kleiner Teil als der vorige reinkopiert, werden die Teile so hässlich zusammengesetzt. Woran liegt das.
Das jetzt wahrscheinlich niemand verstanden hat, ein Beispiel: :wink:

  1. Teilstring von zeile „wirklich langer Satz“ wird in substring kopiert.
  2. Teilstring von zeile „kurzer Satz“ wird in substring kopiert.
  3. Inhalt von substring: „kurzer Satznger Satz“.

Grüße
Fabian

  1. Teilstring von zeile „wirklich langer Satz“ wird in
    substring kopiert.
  2. Teilstring von zeile „kurzer Satz“ wird in substring
    kopiert.
  3. Inhalt von substring: „kurzer Satznger Satz“.

ich bin ein bissl raus aus c im moment :smile:, aber es sieht ganz so aus, das strncpy kein \0 an den substring anhaengt, d.h. das Stringende wird nicht gesetzt. Musst du dann noch selbst machen.

gruss
Mip

strcpy hängt am ende 0x00
strncpy tut es aber nicht deshalb

memset(substring, 0x00, 255);
strncpy(substring, &zeile[index], index2-index);
oder

strncpy(substring, &zeile[index], index2-index);
substring[index2-index] = 0x00;

Gruß
Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

memset(substring, 0x00, 255);
strncpy(substring, &zeile[index], index2-index);

Danke das funktioniert.

An das terminieren hab ich auch gedacht und hab es so probiert:

strcpy(substring,""); 
strncpy(substring, &zeile[index], index2-index);

dann auch noch so:

strcpy(substring,"\0"); 
strncpy(substring, &zeile[index], index2-index);

hat aber nicht funktioniert. weißt du wieso?

Grüße
Fabian

strcpy(substring,"\0");
strncpy(substring, &zeile[index], index2-index);

hat aber nicht funktioniert. weißt du wieso?

weil das \0 nicht mitwandert, sondern einfach ueberschrieben wird.

gruss
mip

1 Like

Hallo Fabian;

char x[6] = {„12345“};
ist das gleiche wie:
x[0] = ‚1‘;
x[1] = ‚2‘;
x[2] = ‚3‘;
x[3] = ‚4‘;
x[4] = ‚5‘;
x[5] = 0x00; // bzw. ‚/0‘;

Jede String-Funktion „weiss“, dass bei dem Wert 0x00 der String zu Ende ist.

strcpy(x, „“);
entspricht:
x[0] = ‚/0‘

jetzt steht in x:
x[0] = ‚/0‘;
x[1] = ‚2‘;
x[2] = ‚3‘;
x[3] = ‚4‘;
x[4] = ‚5‘;
x[5] = ‚/0‘;

Nun: strncpy(x, „AB“, 2);
jetzt steht in x:

x[0] = ‚A‘;
x[1] = ‚B‘;
x[2] = ‚3‘;
x[3] = ‚4‘;
x[4] = ‚5‘;
x[5] = ‚/0‘;

Und dies ist das von dir beobachtete Eergebnis, richtig müsste aber
x[2] = ‚/0‘; gesetzt sein.

Entweder stellst du sicher, dass ALLE Speicherplätze von x den Wert ‚/0‘ enthalten ( memset(x, 0, sizeof(x)); )
Oder du „fummelst“ am Schluss das fehlende ‚/0‘ noch dran.

MfG Peter(TOO)