我想在文件中存储一个结构。
我用了这个代码:

#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”)。

10-04 21:58
查看更多