Problem mit Char array



  • Kann mir jemand sagen warum ich in das Char array nicht den String reinschreiben darf?

    danke für eure Hinweise.

    #include <windows.h> 
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	char hallo[20];
    
    	hallo="solala";  //hier  meckert der Compiler
    	printf("%s",hallo);  
    
    	getch();
    
    	return 0;
    
    }
    

    Die Fehlermeldung des Compilers:

    error C2106: '=' : Linker Operand muss ein L-Wert sein



  • #include <windows.h> 
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	char hallo[20] = "solala"; // oder strcpy o.ä. benutzen
    	printf("%s", hallo);  
    
    	getch();
    
    	return 0;
    }
    


  • Wieso geht dann letzteres?



  • weil das array mit dem stringliteral initalisiert wird.

    anders gehts so:

    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(void)
    {
        char hallo[20];
    
        strcpy(hallo, "solala"); // hier meckert er nicht mehr
        printf("%s",hallo);  
    
        getch();
    
        return 0;
    
    }
    

    du brauchst eine funktion, um strings zu kopieren.
    ja, eigentlich kopiert diese zeile mit dem strcpy() das stringliteral in dein array hinein.

    ein stringliteral allein irgendwo benutzt liefert lediglich einen zeiger auf seinen inhalt zurueck.

    char *p; // hier stand mal int*, aber das hab ich korrigiert
    p = "asdfg";
    printf("%s", p);
    


  • Zero_Clamping schrieb:

    Wieso geht dann letzteres?

    weil das 2 unterschiedliche Konstelationen sind. Bei der ersten deklarierst du ein Array mit 20 Stellen, der aber nicht initialisiert wird. Dann machst du eine Zuweisung "Array = Zeiger" und das geht, weil Arrays nun mal keine Zeiger sind.

    Bei zweiten Bsp erstellt man ein Array mit 20 Stellen, der aber mit dem Inahlt des Zeigers "solala" initialisiert wird. Deswegen fuktioniert den 2. Code. Äquivalent zum ersten Code wäre:

    #include <windows.h> 
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(void)
    {
        char hallo[20];
        strcpy(hallo,"solala");
        printf("%s", hallo);  
    
        getch();
    
        return 0;
    }
    

    edit: da war jemand wohl Tick schneller als ich



  • ....

    hallo entspricht &hallo[0];

    dass heisst wiederum = du wolltest die Adresse der Variablen hallo ändern!



  • [kann geloescht werden]


Anmelden zum Antworten