C++文件读写报错 “segment fault”、数据缺失

对文件进行读取操作,但是出现读取到数据为空或是数据有遗漏的情况,常见原因有以下两种:

1 文件没有成功打开

原因:在打开文件时,文件路径设置错误。

出现这个错误可以通过对文件指针是否为空进行排查。

解决办法:在执行文件打开命令后,一般要对文件指针进行判断是否为空,再执行剩下的命令。代码示例:

FILE *fp=NULL;  //创建文件指针
fp=fopen("/root/code/file_rw/data","r");  //linux系统下注意 /root
//判断文件是否成功打开
if(fp!=NULL)
{
    printf("Open the file successful.\n");
}
else
{
    printf("Open the file fault!\n");
    exit(1);  //退出程序
}
return 0;

2 文件打开成功,读取数据遗漏

在读取文件中的数据时,被读取的数据长度如果超过了用来存放数据的数组的长度,将会导致部分读取信息为空、数据缺失的情况。
如果该文件一共16行数据,每行最长22个字节,而代码中定义存放数据的数组str[20]长度仅为20,那么可能导致前面几行数据能够正常读取输出,后面部分的数据就为空。
代码示例:

    FILE *fp=NULL;  //创建文件指针
    fp=fopen("/root/code/file_rw/data","r");  //linux系统下注意 /root
    //判断文件是否成功打开
    if(fp!=NULL)
    {
        printf("Open the file successful.\n");
    }
    else
    {
        printf("Open the file fault!\n");
        exit(1);  //退出程序
    }

    char str[20];
    //对数组置零
    memset(str,0,20); //如果不执行该操作存入的数据可能出现乱码
    char ch;
    while((ch=fgetc(fp)!=EOF))  //判断是否到文件结束的位置
    {
        fgets(str,20,fp);  //读取一行数据
        printf("%s\n",str);  //打印输出读取的值
    }
    return 0;

 

-------- 如有侵权,联系删除。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值