strcpy() Problem
-
Hallo,
wieder ich. Ehm, diesmal habe ich ein Problem mit der strcpy()-Funktion. Der gewünschte String wird zwar kopiert, doch es werden auch immer einige Zufallszeichen mitkopiert.
Hier mein Code:
void getOneRule() { char *ptr = procfs_buffer; // Im Buffer steht jetzt z.B. TCP;,ACCEPT,192.168.198.97,*,193.99.144.85,81;... int pos = 0; pos = strcspn(ptr,";"); printk("pos: %d\n", pos); char tempString[(pos+1)]; //+1 wegen '\0' ist das so richtig ??? strncpy(tempString, ptr, pos); //soll hier TCP in tempString kopieren printk("Ausgabe: %s\n", tempString); }
Die Ausgabe sieht dann z.B. so aus:
pos: 3
Ausgabe: TCP�$�,Bin für jede Hilfe dankbar.
-
Du musst auch am Ende '\0' setzen.
char tempString[(pos+1)] = {0}; sollte das Problem lösen.
-
Ja, ich vestehe. Werde es morgen mal ausprobieren. Jetzt ist erst mal Bettzeit.
Danke für die schnelle Antwort.
-
C99, 6.7.8:3 schrieb:
The type of the entity to be initialized shall be an array of unknown size or an object type
that is not a variable length array type.
-
Hallo,
also wenn ich char tempString[(pos+1)] = {0}; eingebe, bekomme ich die Fehlermeldung:
error: variable-sized object may not be initializedHabe auch versucht die Zuweisung von {0} ein zwei Zeilen später zu machen.
Also erst mal tempString normal deklariert und dann erst {0} zugewiesen, geht aber auch nicht. Dann will printk den String nicht mehr ausgeben.char tempString[(pos+1)]; //+1 wegen '\0' ist das so richtig ??? strncpy(tempString, ptr, pos); //soll hier TCP in tempString kopieren tempString[pos]={0}; printk("Ausgabe: %s\n", tempString);
Ergibt beim Kompilieren:
error: conflicting types for ‘printk’
--
Gruß
-
Gibt es denn nicht ein Interger-Wert für \0?
So dass ich einfach sowas machen kann:
tempString[pos]=0;
-
Ich glaube ich hab's, einfach:
tempString[pos]='\0';
-
Oh .. garnicht drauf geachtet, dass du da nen VLA hast. Naja, wer die unbedingt nehmen will :x
-
'\0' == 0