#include <stdio.h>
char s[3] = "Robert";
int main()
{
printf("%s",s);
}
Output: Rob
如何正确打印?该字符串不是以null结尾。 我看到了集会。它使用.ascii存储“Rob”,它不是空终止的。 我期待一些垃圾和Rob一起打印。 有人能解释一下这种行为吗?
答案 0 :(得分:4)
您的“Rob”已存储在可执行文件的额外部分中。可执行文件中的部分是对齐的,即带有数据的部分用0填充,直到下一部分。所以printf从部分填充中得到“它”0。举例说明:
#include <stdio.h>
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但是下一个字符串的开头也将被输出。