我正在尝试将整数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?
}
答案 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
相同。