#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);
}
}
这段代码中存在一些问题。首先,数组 x 的大小是6,但是在初始化的时候只赋值了6个元素,超出了数组大小的范围,这是一种未定义行为。其次,在调用 fwrite 函数时,指定了要写入的元素个数为3,这实际上只写入了 x 数组中的前3个元素,即0、1和2。然后,在调用 fread 函数时,同样只读取了前3个元素,因此后面的3个元素(3、4和5)并没有被更新。最后,在 for 循环中,应该在循环结束后关闭文件句柄,而不是在每次循环中关闭。下面是修正后的代码:
#include <stdio.h>
int main()
{
FILE* fp = fopen("test.dat", "wb");
int x[6] = { 0,1,2,3,4,5 }, i;
fwrite(x, sizeof(int), 6, fp);
rewind(fp);
fread(x, sizeof(int), 6, fp);
for (i = 0; i < 6; i++)
{
printf("%d,", x[i]);
}
fclose(fp);
return 0;
}
在修正后的代码中,我们首先将数组 x 的大小设置为6,同时初始化了6个元素。接着,在调用 fwrite 函数时,指定要写入的元素个数为6。在调用 fread 函数时,也指定要读取6个元素。最后,在 for 循环中,我们将关闭文件句柄的操作放在了循环结束后。
你要问啥?
int x[6] = { 0,1,2,3,4,5, } 最后一个逗号要删掉
15行文件关闭放到for循环外面啊,怎么放在循环里
#include <stdio.h>
int main()
{
int x[6] = { 0,1,2,3,4,5,}, i;
FILE* fp = fopen("test.dat", "wb");
if(fp == NULL)
{
printf("file open error!");
return 0;
}
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);
}
在 for 循环中,fclose(fp) 应该放在循环外面,因为在循环中每次打印完整个数组后都应该关闭文件,而不是在每次循环中都关闭文件,否则会导致文件在第二次循环时已经关闭,无法再次读写。正确的代码应该是这样的:
#include <stdio.h>
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 < 3; i++)
{
printf("%d,", x[i]);
}
fclose(fp);
return 0;
}