读书人

关于文件操作那些事儿,该如何解决

发布时间: 2012-05-13 16:39:43 作者: rapoo

关于文件操作那些事儿
#include<iostream>
using namespace std;
int main()
{
FILE *in=fopen("fi.dat","r");
try{
if(!in)
throw in;
}
catch(FILE*)
{
cerr<<"文件打开失败!"<<endl;
exit(1);
}

char a[100]={0};
fread(a,100,100,in);
fclose(in);
cout<<a<<endl;
return 0;
}
为什么有的时候能输出fi.dat中的内容,有的时候就输出为空.把char a[100]={0};改成:char *a =new char[100];memset(a,0,100);为什么问题就解决了呢?

[解决办法]
其确认文件是文本文件吗?有没有ASCII为0的字符?你确定文件包含的字符数一定大于100吗?
如果
是文本文件,文件中没有ASCII为0的字符。
那么
如果 文件内容小于100个字符,那个清buff是必须的,
如果 文件大于等于100个字符,那个你的这段代码完全不能工作。
注意:在C语言中,ASCII为0的字符意味这字符串结束标记,清buff的功能做用是,所有字节都改为0,当读入n个字节,第n+1个字节肯定为0,所有只显示n个字符。

这段代码仍然需要改进,正确的做法是先确定文件的长度,然后分别一块比文件长度稍长的缓冲区,先清整个缓冲区,然后再读入字符。
下面给出示例代码。

C/C++ code
        fseek(fp1,0,SEEK_END);    byteCount=ftell(fp1);    inBuff=(char *)malloc(byteCount+1);        memset(inBuff,0,byteCount+1);    fseek(fp1,0,SEEK_SET);    fread(inBuff,byteCount,1,fp1);    fclose(fp1); fp1=NULL; 

读书人网 >C++

热点推荐