我的下面的代码中的fread和fwrite是抛出分段错误?

时间:2014-08-27 19:22:48

标签: c file

我正在尝试将整数12345写入我的文件名haha使用fwrite并使用fread阅读但我得到分段错误请帮我修复我的代码在下面?

#include<stdio.h>
#include<string.h>
int main()
{
    int num=12345;
    int dupnum;
    FILE *fp;
    fp=fopen("haha","w");
    fwrite(num,sizeof(int),1,fp);//here i m writing num in file
    fclose(fp);
    fp=fopen("haha","r");
    fread(dupnum,sizeof(int),1,fp);// reading from file and store in dupnum
    fclose(fp);
    printf("%d\n",dupnum);// why segmentation fault?
}

3 个答案:

答案 0 :(得分:1)

来自手册页:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

你传递int,需要void *ptr。将代码更改为以下内容:

#include<stdio.h>
#include<string.h>
int main()
{
    int num=12345;
    int dupnum;
    FILE *fp;
    fp=fopen("haha","w");
    fwrite((void*)&num,sizeof(int),1,fp);//pass address of num
    fclose(fp);
    fp=fopen("haha","r");
    fread((void*)&dupnum,sizeof(int),1,fp);// pass address of dupnum
    fclose(fp);
    printf("%d\n",dupnum);
}

答案 1 :(得分:1)

fread需要指向您要存储的值的指针。

fread(&dupnum,sizeof(int),1,fp)

此外,您在调用fopen后未能检查NULL文件句柄。因此,出于这些原因也可能发生分段错误。

答案 2 :(得分:0)

fread的第一个参数需要是一个指针:

fread(&dupnum,sizeof(int),1,fp);

fwrite相同。