gpt4 book ai didi

c++ - 非空终止字符数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:49 24 4
gpt4 key购买 nike

#include <stdio.h>

char s[3] = "Robert";
int main()
{
printf("%s",s);
}

Output: Rob

如何正确打印?该字符串不是空终止的。我看到了集会。它使用 .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):罗宾汉
输出(经过优化的 MinGW-GCC):机械战警

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

关于c++ - 非空终止字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com