LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 787|回复: 3

struct 文件流函数fwrite写入出错(急,在线等)

[复制链接]
发表于 2007-5-25 20:07:17 | 显示全部楼层 |阅读模式
环境:RedHat 9
代码:
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);
        }
}

           
有人遇过这样或类似的问题吗?有的请通传一声,谢谢了
在线等

按照逻辑来说是没有错的,就是不知道问题出在哪里
fwrite(list,sizeof(struct hashTable),1,fp);
size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
发表于 2007-5-25 20:33:01 | 显示全部楼层
嗯,不错,最后没有忘记 fclose,要是也没有忘记 fopen 就更好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-25 21:44:27 | 显示全部楼层
问题已解决,原来是在
        fp=fopen("./meta.dat","wb");
        if(fp=NULL)
        {
                printf("open meta.dat failed\n");
                return -1;
        }
这里,本来已经打开了fp,但是又把fp指向NULL
所以在写数据的时候出错
回复 支持 反对

使用道具 举报

发表于 2007-5-25 22:47:33 | 显示全部楼层
代码怎么和最初看的不一样了?

另外,公开讨论比悄悄话的效果要好,因为公开讨论可以让你的问题被更多的人看到,解决的可能性也会更大一些
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表