Werden "int8_t"-Arrays (aus stdint.h) nullterminiert?



  • Werden int8_t Arrays automatisch nullterminiert? Wie char-Arrays?



  • Zeig doch mal, wie du sie verwenden moechtest. Normalerweise werden nur Sachen in "..." automatisch nullterminiert.



  • knivil schrieb:

    Zeig doch mal, wie du sie verwenden moechtest. Normalerweise werden nur Sachen in "..." automatisch nullterminiert.

    ich dachte, weil ein char auch nur 1 byte groß ist, kann ich auch gleich int8_t nehmen, wo es sicher ist, dass es am ende 1 byte groß ist.

    #include <stdint.h>
    
    int8_t array[]="-- string --";
    

    Geht das überhaupt?

    Ich hab das nicht ausprobiert, ich frage aus interesse.


  • Mod

    int128_t schrieb:

    knivil schrieb:

    Zeig doch mal, wie du sie verwenden moechtest. Normalerweise werden nur Sachen in "..." automatisch nullterminiert.

    ich dachte, weil ein char auch nur 1 byte groß ist, kann ich auch gleich int8_t nehmen, wo es sicher ist, dass es am ende 1 byte groß ist.

    #include <stdint.h>
    
    int8_t array[]="-- string --";
    

    Geht das überhaupt?

    Ich hab das nicht ausprobiert, ich frage aus interesse.

    Ja, das geht und das Array hat hinterher ein Null nach dem letzten '-', da auch das Literal "-- string --" eine (versteckte) Null an der Stelle hat. Man kann alle Arrays aus zu char kompatiblen Typen mit einem Zeichenkettenliteral initialisieren (und Arrays aus zu wchar_t kompatiblen Typen mit einem wchar_t Zeichenkettenliteral).

    Siehe C-Standard §6.7.8, insbesondere Klauseln 14 und 15 (C99).



  • char ist auch immer genau 1 Byte, das stellt der Standard sicher.

    Und zu deinem Beispiel, bei mir geht das. Wird auch nullterminiert, da es ja ein string ist.


  • Mod

    Nur um das mal klar zu stellen:

    int8_t foo[] = {1,2,3}; 
    // ist genau so wenig nullterminiert wie
    char bar[] = {'a', 'b' , 'c'};
    

    Es gelten keine Sonderregeln (bzw. nur die normalen Sonderregeln für char), bloß weil man einen typedef für (signed/unsigned) char gemacht hat.



  • DarkShadow44 schrieb:

    char ist auch immer genau 1 Byte, das stellt der Standard sicher.

    Aber eben nicht 8 Bits, was er vermutlich meinte.



  • int128_t schrieb:

    Werden int8_t Arrays automatisch nullterminiert? Wie char-Arrays?

    char-Arrays werden nicht automatisch nullterminiert...



  • dot schrieb:

    int128_t schrieb:

    Werden int8_t Arrays automatisch nullterminiert? Wie char-Arrays?

    char-Arrays werden nicht automatisch nullterminiert...

    doch, manchmal schon.
    bei der initialisierung :

    char zero_terminated_array[] = "abc";
    

  • Mod

    Das ist aber nur so, weil "abc" nullterminiert ist. Siehe meinen vorherigen Beitrag.


Anmelden zum Antworten