gpt4 book ai didi

c - 为什么 char s [5] 不能正确收集值?

转载 作者:行者123 更新时间:2023-11-30 18:16:23 25 4
gpt4 key购买 nike

这是我的简单程序:

int main(int argc, const char * argv[])
{
char s [5] = "Hello";
printf("%s", s);
return 0;
}

Hello 是 5 个字符的长度,因此我定义了 char s [5] 但输出是:

Hellop\370\277_\377

当我将 char s [5] 更改为 char s [] 时,一切正常。我的代码有什么问题?

最佳答案

您忘记了空终止符。

C 字符串的末尾应有一个 \0 字节来标记字符串的结尾。您的输出看起来很奇怪的原因是因为 printf 在寻找空终止符时已经进入未初始化的内存,从而触发未定义的行为。

在这种情况下,printf似乎幸运地很快找到了一个空值,并在打印一些垃圾后正常终止。然而,这种错误通常会导致您的程序崩溃,并显示消息segmentation failure。当操作系统因为正在执行不应该执行的操作(例如读取不属于它的内存)而终止您的进程时,就会发生“段错误”。

试试这个:

char s[] = "Hello"; //s is now 6 characters long.

通过不提供数字,编译器会决定数组需要多大,并将“Hello”数据复制到其中。

如果您需要一个不想更改的字符串,则应该这样声明它们:

const char* s = "Hello";

这样,您就创建了一个指向静态内存的指针,其中包含字符串“Hello”,无需复制。

关于c - 为什么 char s [5] 不能正确收集值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16489272/

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