Strings auch ohne \0 ?



  • Können in C auch nicht Nullterminierte Strings initialisiert werden, oder geht das nur über den Assembler Umweg?
    Ich möchte Daten in ein statisches Chararray ablegen, wofür ich den Nullterminus nicht brauche.

    char blabla[] = "test1234" erzeugt ja bekanntermaßen die ASCII Folge
    test1234\0 und nicht test1234.

    Viele Grüße



  • Du kannst es über einzelne Zeichen machen oder die Länge vorgeben.

    char txt1[] = {'A','b','C'}; 
    char txt2[3] = "Abc";
    

    Dann solltest du aber einen Kommentar dazu machen, dass das Absicht ist.



  • Ist ja interessant:

    char string[] = "blabla"; ist nullterminiert,

    aber

    char string[6] = "blabla"; nicht???

    Ist das nicht eigentlich etwas inkonsequent, wenn man so recht darüber nachdenkt?

    Wie wäre es mit

    #define STRING "blabla"

    char string[sizeof(STRING)-1] = STRING;
    ?



  • Das Stringliteral ist Nullterminiert.

    Die leeren Klammern überlassen dem Compiler die richtige Länge.

    Wenn du nur 6 Zeichen ablegen willst und kein Platz für die '\0' ist, ist kein Platz für die '\0'.

    Was ist daran inkonsequent? Denk nochmal darüber nach.

    Wie wäre es als Einzeiler

    #define STRING_OHNE_NULL(name,wert) char name [sizeof(wert)-1] = wert
    
    int main(){
    
      STRING_OHNE_NULL(text1,"Hallo");
      STRING_OHNE_NULL(text2,"Welt!");
    
      printf("Hallo %*s %u\n", sizeof(text2), text2, sizeof(text2) );
    
      return 0;
    }
    

Anmelden zum Antworten