Array mit Null abschließen?



  • hi all 🙂

    Warum muss man da ein mit NULL abgeschlossenes Char schreiben?
    Ein Beispiel:

    char cpp[] = {'h', 'e','l', 'l', 'o', '\0'};
    

    und was ist dabei der große Unterschied,wenn ich es mit und/oder ohne das NULL-Zeichen schreibe?

    Pr. Uhrcas



  • Damit die C-Funktionen wissen, wo der String zu Ende ist.

    Kannst ja mal mit printf (obwohl wir im C++ Forum sind) folgende beide Felder ausgeben und sehen was passiert:

    char cpp1[] = {'h', 'e','l', 'l', 'o', '\0', 'w', 'o', 'r', 'l', 'd'};
    char cpp2[] = {'h', 'e','l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};
    


  • Das hat damit zu tun wie Strings in C realisiert sind: Man hat sich darauf geeinigt auf das erste Zeichen im String einen Zeiger zu setzen. Jetzt weiß die Ausgabefunktion aber natürlich nicht wie weit im Speicher dein String geht - kennt ja auch die Arraygröße nicht. Deswegen hat man sich auf '\0' als Endzeichen geeinigt. Die Ausgabefunktion geht soweit weiter, bis sie auf ein '\0' stoßt.

    Wenn die Stringgröße immer bekannt wäre, müsste man auch kein solches Zeichen haben.

    Arrays sind deshalb aber nicht grundsätzlich mit 0 abzuschließen. Vor allem bei Non-Char-Arrays (alias Strings) hat man sich eher auf das übergeben der Länge geeinigt:

    void handle_other_array (type* startptr, size_t len)
    {
        for(size_t i = 0; i < len; ++i)
            do_smth(*(startptr+i)); // alias startptr[i]
    }
    

    MfG SideWinder


Anmelden zum Antworten