怎么在文件读写的时候判断是否出错了

C语言用文件的长度计算数组的长度,这个长度的差是文件写不下的意思么?怎么在文件读写的时候判断是否出错了

文件长度是文件中所包含的字节数,我们用这个就是确认数组到底多大的空间才能容纳数据
长度的差?我不太理解你说的含义,文件长度和数组长度不匹配,就说明不能正常存储,fread和fwrite函数不就是这样做的吗
怎么检查->>>看函数返回值就可以

不要把
fopen("...","...");fscanf,fprintf,fgets,fgetc,fputc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fseek,ftell,fread,fwrite,fscanf,fprintf,fgets,fgetc,fputc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

the return value is EOF for fscanf
fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count. Use the feof or ferror function to distinguish a read error from an end-of-file condition.
fgetc return the character read as an int or return EOF to indicate an error or end of file.
fgets function returns string. NULL is returned to indicate an error or an end-of-file condition. Use feof or ferror to determine whether an error occurred.
fputc return value of EOF indicates an error
On an error, fputs returns EOF
fprintf returns the number of bytes written, returns a negative value instead when an output error occurs.
fwrite returns the number of full items actually written, which may be less than count if an error occurs.

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7748540
  • 你也可以参考下这篇文章:【数据结构 C描述】设计一个程序用于检测输入的符号是否匹配,如果不匹配则输出提示并退出。
  • 你还可以看下c语言参考手册中的 c语言-内存模型与数据竞争
  • 除此之外, 这篇博客: 关于C语言中逆序输出以及判断回文数题目的解法笔记中的 一、如何计算用户输入的数是几位数? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      在做逆序输出以及判断回文数题目之前,先做下这道题,如何计算用户输入的数是几位数呢?

      思路:假设用户输入的数据是四位数1234
      我们知道,1234%10=4,我们就取到了用户输入数值中末位数字4这个数字,这时候我们就知道用户输入的数至少是个位数了(废话)。
      我们还知道,1234/10=123,我们可以利用他把用户输入的数值更新,更新之后,猜到没,我们再继续走步骤一,如果走得动,我们又知道用户输入的数值至少是两位数了。
      就这样再更新成12,取得末位数字2,我们就知道用户输入数值至少为三位数了,再更新成1,取得末位数字1,我们就知道用户输入的数值至少为四位数了这时候1/10=0,完犊子,更新不了了,停止,我们就知道用户输入的数值,最终是四位数
      具体代码如下:

    #include <stdio.h>
    
    int main(void)
    {
        int number = 0; //用来存放用户输入的数值
        int count = 0;//用来记录我们猜测的数值位数。
    
        printf("请输入一个数,我来判断你输入的是几位数:\n");
        scanf("%d", &number);
    
        while (number != 0)//当number/10等于0时
        {
            number = number / 10;//更新number
            count++;//先更新在记录,先记录在更新的话记录的是前一次数值的位数。
        }
    
        printf("您所输入的数是%d位数", count);
    
        return 0;
    }
    
    请输入一个数,我来判断你输入的是几位数:
    56654523
    您所输入的数是8位数
    

  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^