Warum geht string str = ""; aber char t =''; nicht ?



  • Hallo,

    wenn ich

    char t ='';
    

    schreibe wirft mir der Compiler immer eine Fehler raus:

    error C2137: leere Zeichenkonstante
    

    Warum wie kann man "nichts" in ein char schreiben ?

    mfg



  • weil nichts zu wenig ist.



  • ein char hat halt genau 8 bits (auf deinem rechner). da fragt der compiler zu recht, wie er jedes dieser bits stellen soll. selbst wenn du
    char ch;
    schreibst, sind die bits irgendwie gestellt und du kannst cout<<int(ch); machen und da kommt was.



  • char t = "";
    

    müsste gehen.
    Denn da fügt er noch ein /0 ein.

    ---
    EDIT: Oh sorry, geht doch nicht, war mit meinen Gedanken bei string 😞



  • 'Nichts' gibts nicht, 2 mögliche Interpretationen sind:

    // 1. Alle Bits auf 0 setzen
    char ch = 0;
    // bzw.
    char ch = '\0';
    
    // 2. Leerzeichen, weil das dann am Bildschirm als "nichts" dargestellt wird
    char ch = ' ';
    

    MfG SideWinder



  • don't feed the troll.



  • Die einfachen Striche sind Anzeichen für nur ein einzelnes Zeichen. Also char und damit nur 1 Byte.
    Die zweifachen Striche zeigen an, dass es eine char-Array ist.

    \0 ist nur anzeichen für Zeichenkettenende, damit zum Beispiel strcat weiß wo es den zweiten String anfügen soll.



  • Vielen Dank für eure Antworten

    char ch = '\0';
    

    habe ich gesucht.

    Eine abschließene Frage noch. Wieso kann man den
    string str = ""; Schreiben ein String hat zwar
    keine 8 Bit da muesste er doch auch meckern oder ?



  • SideWinder schrieb:

    'Nichts' gibts nicht, 2 mögliche Interpretationen sind:

    // 1. Alle Bits auf 0 setzen
    char ch = 0;
    // bzw.
    char ch = '\0';
    
    // 2. Leerzeichen, weil das dann am Bildschirm als "nichts" dargestellt wird
    char ch = ' ';
    

    MfG SideWinder

    nee. nichts ist '\0', weil das da alle bits 0 sind und weil das auf dem bildschirm als garnix dargestellt wird. also nichtmal einen cursorvorschub erzeugt.
    aber weil das nicht allgemein definiert ist und weil das auch keiner weiß und weil das bei der nächsten compilerversion wieder ganz anders ist und weil das auch sehr verwirrend wäre und weil '\0' eh genau das gleiche wie '' wäre nur deutlicher, hat man eben auf '' verzichtet. außerdem wäre die fehlinterpretation bei str+=''; fatal. man könnte ja meinen, bei '' dürfe der string nicht wachsen, wenn man ohne brille hinguckt.



  • Habitant schrieb:

    Eine abschließene Frage noch. Wieso kann man den
    string str = ""; Schreiben ein String hat zwar
    keine 8 Bit da muesste er doch auch meckern oder ?

    Nein. Ein String beschreibt eine Sequenz von Zeichen, und diese kann selbstverständlich eine Länge von 0 haben. Ein Zeichen (char, wchar_t) hingegen hat nunmal immer eine bestimmte Anzahl von Bits.


Anmelden zum Antworten