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 initialized

    Habe 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


Anmelden zum Antworten