关于C中字符串后面的\ 0字符(或字符?)

Har*_*ari 1 c string sizeof

\和0字符是否存储在字符串末尾的相同位置或不同位置?

main()
{
    char x[]="Hello\0";
    char y[]="Hello12";
    char z[]="Hello\012";
    char w[]="Hello1234";

    printf("%d %d %d %d", sizeof(x), sizeof(y), sizeof(z), sizeof(w));
}
Run Code Online (Sandbox Code Playgroud)

输出:

7 8 7 10
Run Code Online (Sandbox Code Playgroud)

请解释代码的输出.

Pau*_*oub 8

\0在C字符串中是单个字符,ASCII值0.所有C字符串文字也包含一个隐式终止\0字符,无论字符串中包含哪些内容(甚至是另一个\0).

\012 是八进制字符ASCII 10(换行)

所以:

char x[]="Hello\0";      // 5 letters + your \0 + implicit \0 == 7
char y[]="Hello12";      // 7 letters + implicit \0 == 8
char z[]="Hello\012";    // 5 letters + \012 + implicit \0 == 7
char w[]="Hello1234";    // 9 chars + implicit \0 == 10
Run Code Online (Sandbox Code Playgroud)