Not Null Terminated字符数组

#include  char s[3] = "Robert"; int main() { printf("%s",s); } Output: Rob 

如何正确打印? 该字符串不是以null结尾。 我看到了集会。 它使用.ascii存储“Rob”,它不是空终止的。 我期待一些垃圾和Rob一起打印。 有人可以解释我这种行为吗?

您的“Rob”已存储在可执行文件的额外部分中。 可执行文件中的部分是对齐的,即带有数据的部分用0填充,直到下一部分。 所以printf从部分填充中得到“它”0。 为了显示:

 #include  char dummy[] = "ocop"; char s[3] = "Robert"; char second[] = "in Hood"; int main( void ) { printf("%s",s); return 0; } 

输出(MinGW-GCC无优化):Robin Hood
输出(MinGW-GCC优化):Robocop

现在填充中没有0,但是下一个字符串的开头也将被输出。