Kus*_*dal 2 c string declaration
我正在尝试以不同的方式在C中声明字符串以准备考试。我们知道C中的字符串是'\0'结尾处的字符数组。然后我发现,即使我声明了一个5个字符的数组并将5个字符放入其中,例如“ abcde”,它也被接受。那么,空字符存储在哪里?
我以以下方式声明了字符串
char str[] = {'a','b','c','d','e'};
char str2[] = "abcde";
char str3[5] = "abcde";
Run Code Online (Sandbox Code Playgroud)
现在,在第3种情况下,我要分配5个字节的空间,并且数组中恰好有5个字符,那么如果string的末尾应将空字符存储在哪里?还是不附加null的情况?第一种情况和第二种情况如何,那里是否附加了null?
strlen()在所有3种情况下均返回5。
的NUL字符只存储在第二示例
char str2[] = "abcde";
Run Code Online (Sandbox Code Playgroud)
数组自动调整大小以包含它的位置。字符数组不具有是一个字符串,而另外两个没有被编码NUL终止子。
如果代码碰巧将它们正确地视为字符串,那是未定义行为的不幸结果。
#include <stdio.h>
int main(int argc, char *argv[])
{
char str[] = {'a','b','c','d','e'};
char str2[] = "abcde";
char str3[5] = "abcde";
printf("%zu\n", sizeof str);
printf("%zu\n", sizeof str2);
printf("%zu\n", sizeof str3);
}
Run Code Online (Sandbox Code Playgroud)
程序输出:
5 6 5