gpt4 book ai didi

c - 将非空终止字符串传递给 printf 会导致意外值

转载 作者:太空狗 更新时间:2023-10-29 16:39:10 24 4
gpt4 key购买 nike

这个 C 程序给出了一个奇怪的结果:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
char str1[5] = "abcde";
char str2[5] = " haha";

printf("%s\n", str1);
return 0;
}

当我运行这段代码时,我得到:

abcde haha

从代码中可以看出,我只想打印第一个字符串。
为什么它同时打印它们?

最佳答案

"abcde" 实际上是 6 个字节长,因为 C 字符串中的空终止字符。当您这样做时:

char str1[5] = "abcde";

您没有存储空终止字符,因此它不是正确的字符串。

当你这样做时:

char str1[5] = "abcde";
char str2[5] = " haha";
printf("%s\n", str1);

恰好第二个字符串存储在第一个字符串之后,尽管这不是必需的。通过在非 null 终止的字符串上调用 printf,您已经导致了未定义的行为。

更新:

如 clcto 的评论所述,可以通过不显式指定数组的大小并让编译器根据字符串确定它来避免这种情况:

char str1[] = "abcde";

或者如果适用于您的用例,则使用指针代替,尽管它们并不相同:

const char *str1 = "abcde";

关于c - 将非空终止字符串传递给 printf 会导致意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010895/

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