使用fwrite将结构存储在文件中

Kal*_*mar 1 c struct pointers file

我想在文件中存储一个结构.我用过这段代码:

#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);
}
Run Code Online (Sandbox Code Playgroud)

我在Result.txt中获得的结果是:

£0^@^@^N^@^@^@^Z^G@^@^@^@^@^@
Run Code Online (Sandbox Code Playgroud)

问题是为什么?

Gun*_*ica 8

w +在linux上是正确的,w + b只在windows上需要.但我想OP希望"12451, 14,在文件中看到类似结果的东西,并且为什么他不这样做而感到困惑.

fwrite()以二进制形式直接写入数据,旨在fread()以后读取,不打算被人类读取.

你的12451,作为一个4字节整数,十六进制,是00 00 30 a3.当intel处理器以小端格式存储数据时,它将被写入文件中a3 30 00 00.这正是我们所看到的 - 你的前4个字符是井号,其十六进制代码为A3,下一个是0,(30十六进制),然后是2个零字节.与14相同.

由于你的ch是一个指针,所以指针被写入,而不是它指向的字符串("result").