我对以下C代码片段感到有些困惑:
printf("Peter string is %d bytes\n", sizeof("Peter")); // Peter string is 6 bytes
这告诉我,当C用双引号编译一个字符串时,它会自动为空终止符添加一个额外的字节.
printf("Hello '%s'\n", "Peter");
该printf
函数知道何时停止读取字符串"Peter",因为它到达空终止符,所以......
char myString[2][9] = {"123456789", "123456789" }; printf("myString: %s\n", myString[0]);
在这里,printf
打印所有18个字符,因为没有空终止符(并且它们不适合不取出9).C不在变量定义中添加空终止符吗?
你的字符串是[2] [9].那些[9]是['1','2'等等......'8','9'].因为你只在第一个数组维度中为9个字符提供了空间,并且因为你使用了全部9个字符,所以没有空间放置'\ 0'字符.重新定义你的char数组:
char string[2][10] = {"123456789", "123456789"};
它应该工作.
当然可以,你只是没有为'\ 0'字节留下足够的空间.进行中:
char string[2][10] = { "123456789", "123456789" };
将按预期工作(将只打印9个字符).