Frage String Literal?



  • ja bei

    char acText[20]="....";
    

    kannst ich den text zur laufzeit verandern

    aber bei

    char *acText="....";
    

    nicht ! Soweit mein Wissen :xmas2:



  • BorisDieKlinge schrieb:

    aber bei

    char *acText="....";
    

    nicht ! Soweit mein Wissen :xmas2:

    dh das hier darf dann nicht funktionieren??

    #include <stdlib.h>
    #include <stdio.h>
    
    char *szText = "blablabla";
    
    int main(int argc, char **argv) {
    
    printf("%s\n", szText);
    szText = "Hallo";
    printf("%s\n", szText);
    return 0;
    }
    

    liefert mir als ergebnis:

    ~$ gcc -Wall -ansi -pedantic sztext.c
    ~$ ./a.out
    blablabla
    Hallo
    

    man sollte nur aufpassen, dass das was man auf die variable schreibt nicht größer ist als was schon drin steht, sonst muss man den speicher neu allocieren
    😉



  • Den Zeiger umzubiegen ist kein Problem - du änderst ja nichts am String-Literal selber, sondern verwendest nur ein anderes. Gefährlich wird es nur, wenn du über den (dereferenzierten) Zeiger den String-Inhalt verändern willst (z.B. szText[0]='H'; oder strcpy(szText,"Hallo"); )

    (und selbst da ist es Glückssache, was am Ende herauskommt - mit etwas Pech schluckt das Programm das und du hast irgendwann später falsche Werte)



  • siehste killerkipferl :xmas2:



  • mit str(n)cpy bekomm ich ein seg fault 🙂

    btw: dein teil ginge ja sowieso net boris...



  • welcher teil ginge nicht?



  • char *acText="....
    

    assignment makes integer from pointer without a cast



  • BorisDieKlinge schrieb:

    ja bei

    char acText[20]="....";
    

    kannst ich den text zur laufzeit verandern
    aber bei

    char *acText="....";
    

    nicht ! Soweit mein Wissen :xmas2:

    bei char text[20] = "...";, wird ein array aus 20 zeichen angelegt. bevor 'main' aufgerufen wird, werden in die ersten paar bytes alle zeichen von "..." kopiert.

    bei *text="...."; wird kein array angelegt, dafür aber ein pointer und bevor die 'main' aufgerufen wird, wird diesem pointer eine adresse auf dieses string-literal "..." zugewiesen.

    in beiden fällen ist das "..." read-only. im ersten fall aber gibt's ein array und im zeiten 'nur' einen pointer.

    🙂



  • String-King schrieb:

    in beiden fällen ist das "..." read-only. im ersten fall aber gibt's ein array und im zeiten 'nur' einen pointer.
    🙂

    fortsetzung: und das array sowie der pointer sind natürlich veränderbar.



  • alos killerkipferl 😉 mein code geht. erst testen dann nörgeln;)


Anmelden zum Antworten