#include <stdio.h>
struct struct_type
{
int d;
};
int main()
{
struct struct_type *cust;
cust->d=13;
FILE* fp;
fp = fopen("path to file", "wb+");
or,
fp = fopen("path to file", "w+");
fwrite(cust, sizeof(struct struct_type), 1, fp);
fclose(fp);
return 0;
}
预期输出
13
但是将垃圾值写入文件。
答案 0 :(得分:5)
假设您已为cust
分配内存,或使用普通结构而不是指针,您将获得一个文件,其中包含您平台上int 13的二进制表示。例如,在记事本中这是不可读的。
如果你看一下十六进制编辑器中的输出,你会看到几个零字节和一个0xOD
- 零字节数取决于你平台上的整数大小,以及它们是否是13字节之前或之后取决于其字节顺序。
如果您希望文件中包含13
作为文字,请使用fprintf
。
(由于你没有分配内存,你的程序有不确定的行为,可以做任何事情。)
修复堆栈上的结构:
#include <stdio.h>
struct struct_type
{
int d;
};
int main()
{
struct struct_type cust;
cust.d=13;
FILE* fp;
fp = fopen("path_to_file", "wb+");
fwrite(&cust, sizeof(cust), 1, fp);
fclose(fp);
return 0;
}
$ gcc -Wall -std=c99 -pedantic t.c
$ ./a.out
$ hexdump -C path_to_file
00000000 0d 00 00 00 |....|
00000004
要获取文本文件,请将fwrite
替换为:
fprintf(fp, "%d", cust.d); // or "%d\nd";
并从开放模式中删除“b”,因为这是二进制I / O.
答案 1 :(得分:2)
将menory分配给结构指针cust
fwrite(cust, sizeof(struct struct_type), 1, fp);
将二进制数据写入文件。
存在的数据是二进制数据,即非垃圾。
如果你想查看它是否正确写入对象和打印。
使用fread()
其他明智的做法是将整数转换为字符串并写入文本文件。
然后你就可以看到13。