我需要使用C的I/O函数将数据写入二进制文件.以下代码导致运行时异常:
#include "stdio.h"
int main(int argc,char* argv[]) {
FILE *fp = fopen("path_to_file.bin","wb");
if(fp == NULL) {
printf("error creating file");
return -1;
}
int val = 4;
fwrite((const void*)val,sizeof(int),1,fp);
fclose(fp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码在fwrite处死掉.你能发现我做错了什么吗?显然,我正试图访问0x0000004或类似的数据.
谢谢 !
unw*_*ind 25
我认为尼尔的答案可以改进.我意识到它已被接受,所以这只是为了展示一些对比(这就是为什么我不只是编辑他的原因).
fwrite(&val, sizeof val, 1, fp);
Run Code Online (Sandbox Code Playgroud)
两项改进:
sizeof直接在对象上使用,因为这是您传递指针的内容.对我来说很有意义,比重复自己和使用类型名称更安全.小智 16
fwrite((const void*)val,sizeof(int),1,fp);
Run Code Online (Sandbox Code Playgroud)
应该:
fwrite((const void*) & val,sizeof(int),1,fp);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你不使用强制转换,你会得到一个明智的错误信息.C(和C++)程序员经常使用强制转换程序,这是一个很好的经验法则,"如果它需要演员,那可能是错误的".