读书人

struct 文件流函数fwrite写入出错(急1

发布时间: 2012-03-20 14:01:11 作者: rapoo

struct 文件流函数fwrite写入出错(急,100分,在线等)
原来的代码太多,找了一个相似的例子:
int main()
{
char str[2000];
FILE * fp;
int i,j;
fp=fopen( "./meta.dat ", "wb ");
if(fp=NULL)
{
printf( "open meta.dat failed\n ");
return -1;
}
struct hashTable * ht = (struct hashTable *)malloc(sizeof(struct hashTable));
ht-> count = 0;
ht-> next = NULL;
ht-> AnodeType= lh_strhash(str);
struct hashTable * list;
memset(str,0,sizeof(str));
strcat(str, "ab ");
for(i=1; i <11; i++)
{
for(j = 0;j <10; j++)
{
hashTableInsert(str, (unsigned int)(i*100+j), ht);
}
strcat(str, "ab ");
}
list = ht-> next;

for(; list-> next!=NULL;list=list-> next)
{
fwrite(list,sizeof(struct hashTable),1,fp); <---程序到这里发生错误
}
printf( "writing to disk````\n "); //按道理说list已经是一个指针,传应该是没问题的了,但是怎么就出错了?


//还是我理解错误传递了错误的参数呢?那应该怎么传?
for(ht-> next; ht-> next!=NULL;ht-> next=ht-> next-> next)
{
free(ht);
}
}
在数据写入过程中,就几个个别的数据无法写入,其他都没有问题!这是怎么会事?


[解决办法]
WriteNumB = (int)fwrite( (stUserData*)pview, 1, sizeof(stUserData), fp);
再看出错的时候返回多少?

[解决办法]
我的建议是,不要长时间的开启一个文件流,尽量在用到的时候再开启,用完后马上关掉。长时间的开启会产生一些莫名其妙的问题,我以前遇到过,有的数据可以写进去,有的就写不进去,这次运行全写进去了,下次可能就会漏掉几个~ 用时再开启,用完马上关闭,虽然效率上差一点但是可以避免这种问题。
[解决办法]
函数原型: int fwrite(char *ptr,unsigned size,unsigned n,FILE *fp);

返回值为 写如的数据项的个数,
正确情况下是 n

所以对 fwrite 判断是否结果为 n 就可以知道了。

读书人网 >C++

热点推荐