我想在文件中存储一个结构。
我用了这个代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int a;
short b;
char *ch;
} wrFile;
main()
{
FILE* fd=fopen("Result.txt","w+");
wrFile wf={12451,14,"result"};
fwrite(&wf,sizeof(wrFile),1,fd);
fclose(fd);
}
我在Result.txt中得到的结果是:
£0^@^@^N^@^@^@^Z^G@^@^@^@^@^@
问题是为什么?
最佳答案
w+在linux上是正确的,w+b只在windows上需要但我想操作人员想在文件中看到类似"12451, 14,
result的内容,他很困惑为什么他不这样做。fwrite()
直接以二进制形式写入数据,打算稍后由fread()
读取,不打算让人类读取。
您的12451
是一个4字节的十六进制整数,它是00 00 30 a3
由于英特尔处理器以小尾数格式存储数据,因此数据将以a3 30 00 00
格式写入文件这正是我们看到的-前4个字符是磅符号,它的十六进制代码是A3,下一个是0,(30
在十六进制),然后是2个零字节。和14号一样。
因为ch是指针,所以指针是写的,而不是它指向的字符串(“result”)。