Unterschied char* und char[]



  • Hi, wenn ich folgenden Code habe:

    #include <stdio.h>
    
    int main(void)
    {
        char jo[] = "hallo!";
        jo[0] = 'a';
        printf("%s",jo);
        return 0;
    }
    

    dann funktioniert das, wenn es aber so ist:

    #include <stdio.h>
    
    int main(void)
    {
        char *jo = "hallo!";
        jo[0] = 'a';
        printf("%s",jo);
        return 0;
    }
    

    dann stürzt das Programm ab, wird "hallo" bei den 2 verschiedenen Codes an einer anderen Stelle in der Exe gespeichert???



  • Ja.

    Das eine ist eine C-Array Initialisierung (das erste), das ist andere ist ein C-String.

    Bei zweiterem zeigt deine Variable auf eine konstante Zeichenkette zur Laufzeit, wenn du da rein schreiben willst, crasht es natürlich.



  • http://c-faq.com/aryptr/index.html

    Das erste jo ist ein Array im automatischen Speicher, was du natürlich verändern darfst.

    Das zweite jo ist ein Zeiger. Es zeigt auf das erste Element eines im statischen Speicher liegendes unveränderbares Array. Eigentlich solltest du da eine Compiler-Warnung bekommen, weil das Array eigentlich "const" ist und du aber aus C-Kompatibilitätsgründen es beim Zeiger weglassen darfst. Das Array darfst du aber trotzdem nicht ändern.



  • ah ok


Anmelden zum Antworten