我想在文件中存储一个结构.我用过这段代码:
#include#include 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上需要.但我想OP希望"12451, 14,
在文件中看到类似结果的东西,并且为什么他不这样做而感到困惑.
fwrite()
以二进制形式直接写入数据,旨在fread()
以后读取,不打算被人类读取.
你的12451
,作为一个4字节整数,十六进制,是00 00 30 a3
.当intel处理器以小端格式存储数据时,它将被写入文件中a3 30 00 00
.这正是我们所看到的 - 你的前4个字符是井号,其十六进制代码为A3,下一个是0,(30
十六进制),然后是2个零字节.与14相同.
由于你的ch是一个指针,所以指针被写入,而不是它指向的字符串("result").