Problem mit strcat



  • plizzz schrieb:

    s1= malloc(100*sizeof(char));
    

    Das sizeof(char) kannst du weglassen, das ist immer eins.
    🙂



  • SG1 schrieb:

    noobLolo schrieb:

    also müßte es in z.11 eher heißen "strcat(s1,"bla");"

    strcpy. Oder vorher das erste Byte auf 0 setzen.

    ja es ist schlecht immer davon auszugehen, dass man an einer linux kiste sitzt...



  • Ok stimmt, da ich das erste mal mit den Stringfunktionen gearbeitet habe, habe ich verbissen den Fehler da gesucht und gar nicht bemerkt, dass z11 so natürlich weniger sinnvoll ist.

    Das mit dem *s1=0; ist mir dann auch aufgefallen, als bei der Ausgabe vorne immer etwas Schwachsinn stand.

    sizeof(char) benutze ich eigentlich deshalb, damit ich bei meinem Code nachher noch weiß, dass ich für einen string alloziiert habe. Gut, dass wüsste ich wohl auch, wenn ich es einfach weglassen würde, aber so ists mir irgendwie wohler.

    Vielen Dank dann, die Frage ist zu 100% beantwortet.

    MfG plizzz



  • plizzz schrieb:

    sizeof(char) benutze ich eigentlich deshalb, damit ich bei meinem Code nachher noch weiß, dass ich für einen string alloziiert habe. Gut, dass wüsste ich wohl auch, wenn ich es einfach weglassen würde, aber so ists mir irgendwie wohler.

    Ich schreibe in solchen Fällen immer

    char *s1;
    
    s1 = malloc(100 * sizeof(*s1));
    

    Als Erinnerung daran, dass es ein String werden soll, reicht mir der Typ von s1; und so muss ich weniger ändern, wenn ich später doch lieber einen wchar_t-String haben will.
    🙂



  • noobLolo schrieb:

    SG1 schrieb:

    noobLolo schrieb:

    also müßte es in z.11 eher heißen "strcat(s1,"bla");"

    strcpy. Oder vorher das erste Byte auf 0 setzen.

    ja es ist schlecht immer davon auszugehen, dass man an einer linux kiste sitzt...

    ws hat linux damit zu tun? 😕



  • supertux schrieb:

    noobLolo schrieb:

    SG1 schrieb:

    noobLolo schrieb:

    also müßte es in z.11 eher heißen "strcat(s1,"bla");"

    strcpy. Oder vorher das erste Byte auf 0 setzen.

    ja es ist schlecht immer davon auszugehen, dass man an einer linux kiste sitzt...

    ws hat linux damit zu tun? 😕

    linux nullt den speicher der per malloc bereitgestellt wird automatisch (aus sicherheits gründen falls mal so einer kommt wie ich :p ). aber du hast recht nach ansi ist das nicht definiert.

    lg lolo



  • ein solches Verhalten ist mir noch nie aufgefallen, vor allem, weil ich mich auf sowas nicht verlasse, wenn es nicht explizit in der Dokumentation erwähnt wird. Kann es sein, dass du jetzt malloc mit calloc verwechselst?



  • ja scheinbar hab ich da nen denkfehler aber da bin ich zum glück nicht der einzige 🤡 http://stackoverflow.com/questions/1622196/malloc-zeroing-out-memory

    wow das ist ja mal ein ganz schönes stück was ich mir da geleistet hab, frag mich bitte nicht wie ich darauf gekommen bin, bzw. wo ich das aufgeschnappt hab.

    danke das du mir diesen fehler aufgezeigt hast wer weiß wie lang ich den sonst noch gemacht hätt 😮 *kiss*

    lg lolo



  • supertux schrieb:

    ein solches Verhalten ist mir noch nie aufgefallen, vor allem, weil ich mich auf sowas nicht verlasse, wenn es nicht explizit in der Dokumentation erwähnt wird. Kann es sein, dass du jetzt malloc mit calloc verwechselst?

    Ich verwende meistens calloc, weil es halt auch bei mir unter Windows genullten Speicher zurückgibt. Aber ich müsste eigentlich auch mal schauen, ob das überhaupt dokumentiert oder nur eine GCC-Implementation ist.

    EDIT: noobLolo war schneller und besser 😉



  • ja, calloc garantiert, dass der Speicher "genullt" wird.


Anmelden zum Antworten