gpt4 book ai didi

c - C 是如何将信息存储到文件中的呢?

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:23 27 4
gpt4 key购买 nike

在下面的简单代码中,我将一个整数 (10) 写入一个文件,然后读回它以确保它已成功完成并且确实如此。然而,当我打开文件时(尝试了 notepad++ 和 vscode),我看到了这样的东西:


???

代码如下:

int main(){

int var = 10;
FILE* fp = fopen("testfile","w");
rewind(fp);
fwrite(&var,sizeof(int),1,fp);

fflush(fp);
fclose(fp);

int var2 = 0;

fopen("testfile","r+");
fread(&var2,sizeof(int),1,fp);

printf("num: %d\n",var2);

return 0;
}

当然我认为它可能是用一种特殊格式编写的,vscode 无法识别,但最近我学习了一个简单的数据库编码,它使用相同的方式将记录保存在文件中以及当你打开它的输出文件时使用 vscode,它同时显示 ???s 和信息,但是,这里它只显示 ???s 而没有信息。所以虽然这看起来是一个非常基本的问题,但我找不到它的答案,那么 10 是如何真正存储在那个文件中的呢?提前致谢。

最佳答案

当您使用 fwrite 写入文件时,它会读取构成 var 的原始字节并将它们写入磁盘。这是数字的二进制表示

如果你使用像od这样的工具,它会打印出文件包含的字节:

[dbush@db-centos7 ~]$ od -tx1 testfile 
0000000 0a 00 00 00
0000004

你可以在这里看到第一个字节包含值 10,接下来的 3 个包含值 0。这告诉我们一个 int 占用 4 个字节并以小端格式存储,意味着最低有效字节在前。

如果您改为使用 fprintf 来写入值:

fprintf(fp, "%d\n", var);

它会将文本表示写入文件。该文件将如下所示:

[dbush@db-centos7 ~]$ cat testfile 
10
[dbush@db-centos7 ~]$ od -tx1 testfile
0000000 31 30 0a
0000003

我们可以在这里看到打印文件显示可读文本,od 向我们显示字符 '1''0',以及换行符。

关于c - C 是如何将信息存储到文件中的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54852891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com