Kyl*_*nin 22

由于您已经声明了大小,因此两个声明完全相同.但是,如果未指定大小,则可以看到第一个声明生成更大的字符串:

char a[] = "a\0";
char b[] = "a";

printf("%i %i\n", sizeof(a), sizeof(b));
Run Code Online (Sandbox Code Playgroud)

版画

3 2
Run Code Online (Sandbox Code Playgroud)

这是因为一个结尾有两个空值(显式的和隐式的),而b只有隐式结束.


小智 16

好吧,假设两种情况如下(避免编译错误):

char str1[32] = "\0";
char str2[32] = "";
Run Code Online (Sandbox Code Playgroud)

正如人们所说,str1初始化为两个空字符:

char str1[32] = {'\0','\0'};
char str2[32] = {'\0'};
Run Code Online (Sandbox Code Playgroud)

但是,根据C和C++标准,如果初始化数组的一部分,则默认初始化数组的其余元素.对于字符数组,其余字符都是零初始化(即空字符),因此数组实际上初始化为:

char str1[32] = {'\0','\0','\0','\0','\0','\0','\0','\0',
                 '\0','\0','\0','\0','\0','\0','\0','\0',
                 '\0','\0','\0','\0','\0','\0','\0','\0',
                 '\0','\0','\0','\0','\0','\0','\0','\0'};
char str2[32] = {'\0','\0','\0','\0','\0','\0','\0','\0',
                 '\0','\0','\0','\0','\0','\0','\0','\0',
                 '\0','\0','\0','\0','\0','\0','\0','\0',
                 '\0','\0','\0','\0','\0','\0','\0','\0'};
Run Code Online (Sandbox Code Playgroud)

所以,最后,两者之间确实没有区别.