我写了一个代码只是为了理解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]=“你好”;
这是错误的,因为C中的字符串以空结尾。您不为空终止分配空间。一个好的编译器应该给你一个警告。(显然gcc甚至不使用-Wall-Wextra,所以这是很糟糕的)。
将“bounjour”读入该数组也是错误的,因为C数组没有边界检查,也没有任何库函数。因此,如果您试图在数组中存储比您有空间更多的数据,您将在数组的边界之外写入,程序将(希望)崩溃。你调用未定义的行为,所以任何事情都可能发生。
通过声明足够大的数组来解决这个问题,并研究字符串的空终止。

10-01 23:52