Zeichenkettenliterale



  • Hallo @ all,

    Um beispielsweise den String "Bla" zu speichern, kann ich das wie folgt anstellen:

    char p[] = "Bla";
    

    Damit steht

    p[0]=='B';
    p[1]=='l';
    p[2]=='a';
    p[3]=='\0';
    

    Ich kann allerdings auch schreiben,

    const char* p = "Bla";
    

    p Zeigt somit auf 'B'.
    Tja, ich nehme mal an auch hier steht im Speicher "Bla\0", sonst wüsste das Programm ja nicht, wie viele Zeichen es ausgeben soll.

    Um ein "char" zu speichern, brauche ich genau ein byte, ich weiß aber nicht ob ich nicht ein zwietes Zeichen später ausgeben soll, müsste also das Ende extra anzeigen, brauche daher 2 Byte, dass kann doch nicht sein (und ist ja nicht so). Habe ich da etwas falsch verstanden, oder könnt ihr mir erklären wie das Programm später weiß wie viel es ausgeben soll?

    Danke für eure Antworten.

    mfg



  • char != Zeichen.
    Ein char kann ein Zeichen nach den Vorgaben der ASCII-Tabelle speichern. Wenn man eine Zeichenkette speichert weiß man nicht wie lang sie ist und terminiert diese deshalb mit null. Bei einem char macht das keinen Sinn, da es onehin nur ein Zeichen enthalten kann. Ein const char* zeigt auf ein char im Speicher. Dies _kann- ein String sein, muss aber rein theoretisch nicht. In der Regel kann man aber bei einem const char* (falls im Code nicht anders ersichtlich) von einer zeichenkette ausgehen.


Anmelden zum Antworten