#include
int main()
{
FILE* fp = fopen("test.dat", "wb");
int x[6] = { 0,1,2,3,4,5}, i;
fwrite(x, sizeof(int), 3, fp);
rewind(fp);
fread(x, sizeof(int), 3, fp);
for (i = 0; i < 6; i++)
printf("%d,", x[i]);
fclose(fp);
}
请问这段代码为什么打印的是0,1,2,3,4,5呢,
不应该是0,1,2吗?
在这段代码中,首先将数组x的前三个整数{0, 1, 2}写入二进制文件"test.dat"中,然后将文件指针回到文件开头,再从文件中读取三个整数,也就是读取了之前写入的{0, 1, 2},并将它们存储回数组x中。最后通过循环输出数组x中的所有六个整数。
因此,输出的结果应该是0,1,2,3,4,5。原因是,虽然在写入文件时只写入了前三个整数,但在读取文件时仍然读取了整个数组x的大小,即读取了3个整数的大小,因此fread函数读取了文件中的前三个整数{0, 1, 2},并将它们存储到数组x的前三个位置中,而数组的后三个位置{x[3], x[4], x[5]}则没有被修改,仍然保持原来的值{3, 4, 5}。因此,在循环中输出数组x时,会输出所有六个整数的值。
你换个数组来测试
数组x已经被你赋值好了
虽然只写入了3个数,读出了3个数,可是后3个数已经被赋值了345了呀
fwrite()函数,供参考:https://baike.baidu.com/item/fwrite/10942398?fr=aladdin
fread()函数,供参考:https://baike.baidu.com/item/fread/10942353?fr=aladdin
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这段代码打印的结果为0,1,2,0,1,2。原因是在文件操作中使用了rewind函数,它的作用是将文件指针重新指向文件开头。在本代码中,将文件指针重新指向文件开头之后,接着又使用fread函数读取了3个int型数据到x数组中,此时x数组中前3个元素被新读取的数据覆盖,而后面3个元素没有被读取到新的数据,仍然保留着fwrite写入的数据。因此,最终打印出来的结果为0,1,2,0,1,2。