#include <stdio.h>
char s[3] = "Robert";
int main()
{
printf("%s",s);
}
Output: Rob
如何正确打印此内容?该字符串不是以 null 结尾的。
我看到了集会。它使用 .ascii 来存储非空终止的“Rob”。
我预计会与 Rob 一起打印一些垃圾。
有人可以向我解释这种行为吗?
您的“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,而是也将输出的下一个字符串的开头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)