Frage zu unsigned char



  • char buf[256];
    
    sprintf(buf, "Ein String");
    

    Aber das ist eher C... In C++ macht man das mit std::string:

    std::string buf = "Ein String";
    
    buf += " der immer laenger wird";
    buf += ", lol";
    


  • ... schrieb:

    char buf[256];
    
    sprintf(buf, "Ein String");
    

    Aber das ist eher C... In C++ macht man das mit std::string:

    std::string buf = "Ein String";
    
    buf += " der immer laenger wird";
    buf += ", lol";
    

    Übrigens mit buf.c_str() kommst du dann auch an ein char * was die meisten WinAPI Funktionen erwarten.



  • ... schrieb:

    Übrigens mit buf.c_str() kommst du dann auch an ein char * was die meisten WinAPI Funktionen erwarten.

    Damit bekommt man einen const char-pointer. Deswegen auch **c_**str().



  • unsigned char ist optimal zum speichern von Farbwerten 😉
    Man könnte meinen dass es dafür erfunden wurde.

    Gruß



  • Janjan schrieb:

    ... schrieb:

    buf.c_str()

    Damit bekommt man einen const char-pointer. Deswegen auch **c_**str().

    ...und ich dachte immer, dass das c hier für die Sprache C und den in C üblichen nullterminierten "character strings" steht. Das c könnte natürlich auch einfach für character stehen... An const hatte ich dabei nie gedacht... 🙂



  • Die Klasse std::stringstream hat zum Beispiel eine Methode str() , die einen String ( std::string ) zurückliefert. Als Analogie dazu scheint es mir naheliegend, für einen C-String ( const char* ) den Bezeichner c_str() zu wählen.



  • Ich weiß jetzt auch, dass das {""} alle Bits der 16 Byte auf 0 setzt.

    Ist das standardkonform?
    Sollte nicht nur das 1. Zeichen auf 0 gesetzt werden (= leerer String)?



  • mx schrieb:

    Ich weiß jetzt auch, dass das {""} alle Bits der 16 Byte auf 0 setzt.

    Ist das standardkonform?
    Sollte nicht nur das 1. Zeichen auf 0 gesetzt werden (= leerer String)?

    Ich weiss nicht ob es überhaupt standardkonform ist ein unsigned char Array mit einem String zu initialisieren.

    Davon abgesehen...

    Wenn du ein POD Array initialisierst, dann werden immer alle Elemente initialisiert. Elemente die man nicht angibt werden dabei auf Null initialisiert.
    Man kann dabei sogar auch kein Element angeben:

    int a[10] = { 1 }; // initialisiert a[0] mit 1, alle weiteren mit 0
    int b[10] = {}; // initialisiert alle 10 Elemente mit 0
    int c[10]; // uninitialisiert
    

    p.S.: das gilt natürlich auch wenn man ein char Array mit einem String-Literal initialisiert, welches kürzer ist als das char Array.


  • Mod

    hustbaer schrieb:

    p.S.: das gilt natürlich auch wenn man ein char Array mit einem String-Literal initialisiert, welches kürzer ist als das char Array.

    Das beantwortet dann auch deine Frage, ob die Null-Initialisierung mit "" standardkonform ist.



  • SeppJ schrieb:

    hustbaer schrieb:

    p.S.: das gilt natürlich auch wenn man ein char Array mit einem String-Literal initialisiert, welches kürzer ist als das char Array.

    Das beantwortet dann auch deine Frage, ob die Null-Initialisierung mit "" standardkonform ist.

    Ich denke es geht speziell um das unsigned . "" ist ja vom Typ const char* ohne unsigned .


Anmelden zum Antworten