all righyyyy 2023-02-17 11:40 采纳率: 97.4%
浏览 23
已结题

关于#c语言 文件#的问题,请各位专家解答!

#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 < 6; i++)
{
    printf("%d,", x[i]);
    fclose(fp);
}
}

  • 写回答

3条回答 默认 最新

  • wan9zhi 2023-02-17 11:58
    关注

    这段代码中存在一些问题。首先,数组 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 循环中,我们将关闭文件句柄的操作放在了循环结束后。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月17日
  • 已采纳回答 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥20 win11无法启动 持续蓝屏且系统还原失败,无法开启系统保护
  • ¥15 哪个tomcat中startup一直一闪而过 找不出问题
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码