当前位置: 代码迷 >> 综合 >> C++文件读写报错 “segment fault”、数据缺失
  详细解决方案

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

热度:9   发布时间:2023-11-27 02:36:18.0

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

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;

 

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

  相关解决方案