gpt4 book ai didi

c - 害怕 c 中的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:56 25 4
gpt4 key购买 nike

我写了一段代码只是为了了解 fread 的工作原理,但我不明白这是怎么可能的。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void main(){
char spool[5] = "hello";
fread(spool, sizeof(char), 6, stdin); //stdin == "bonjour"
printf("\n%s\n", spool);
}

首先,我认为 spool 的值会被“bonjo”取代,但我得到了“bonjou”。我不明白为什么我得到一个 6 个字符的字符串而不是 5 个字符的字符串。

最佳答案

char spool[5] = "hello";

这是错误的,因为 C 中的字符串以 null 结尾。您不为空终止分配空间。一个体面的编译器应该给你一个警告。 (显然 gcc 甚至没有使用 -Wall -Wextra,所以这很糟糕)。

将“bounjour”读入该数组也是错误的,因为 C 数组没有边界检查,任何库函数也没有。因此,如果您尝试在数组中存储比可用空间更多的数据,您将在数组边界之外写入,并且程序将(希望)崩溃。您调用未定义的行为,所以任何事情都可能发生。

通过声明一个足够大的数组来解决这个问题,并研究字符串的空终止。

关于c - 害怕 c 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079349/

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