C - fwrite创造了胡言乱语

时间:2017-11-15 08:12:28

标签: c

我想将数组的内容写入文件。下面的代码是我的简化程序。它确实创建了文件" test.txt",但它只将一堆0和\写入文件。我做错了什么?

#include <stdio.h>
#include <stdlib.h>

int main(){

    int a[10],i;
    for(i=0;i<10;i++) a[i]=i;

    FILE* f = NULL;
    f = fopen("test.txt","ab+");
    fwrite(&a,sizeof(int),sizeof(a),f);

    return 0;
}

这些是文件的内容:

\ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 0 0 \ 00 \ 00 \ 00 \ 00 \ 90 @ \ 0 0 \ 00 \ 00 \ 00 \ 00 \ 00P8 \ 00 \ 0 0 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ B9 \ C5?\ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 008%\ n \ j \ n \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 80 @ \ 00 \ 00 \ 00 \ 00 \ 0 0 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ AD \ E6 \ FE \ 8A \ F6Ť\ 90 @ \ 00 \ 00 \ 00 \ 00 \ 00 0%Ĵ\ FC \ 00 \ 00 \ 00 \ 00 \ 0 0 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00

1 个答案:

答案 0 :(得分:1)

您无法区分表示。理解这种差异是每个程序员需要的一项重要技能,它与理解事物和东西之间的区别同样重要。

如果要将数组的值写入文件,则必须将它们转换为合理的表示形式以写入文件。你的代码永远不会这样做。

假设我想告诉你我拥有多少辆汽车。它是两辆车。我必须将第二个转换为某种形式,我可以与您沟通。既然我们都说英语,我可以说“&#34; two&#34;”。但是,如果我只是试图向你展示我的大脑编码我拥有的汽车数量的内部方式,那么你将无法理解它。这种编码只对我的大脑有意义。

您的代码尝试直接将数组的内部编码写入文件。但谁知道如何理解内部编码?它看起来像胡言乱语。

就像试图在一张纸上写下三号一样。你可以写一个它的表示,比如&#34; three&#34;或&#34; 3&#34;或&#34; III&#34;。但是你不能仅仅拿出这个数字并以某种方式把它写在纸上。这是一个类别错误。

同样地,如果你很高兴并想告诉别人你很开心,那么你必须选择一种语言和一种编码该语言(口头或书面)的方式,并代表你对所选语言感到满意的想法。形成。如果没有先选择合适的代表并适当地编码构思以便传输给其他人,您就无法输出您满意的事实。同样,这是一个类别错误。

Punch&#34;序列化&#34; - 将内部编码转换为具有明确定义格式的合理字节流的过程 - 进入您最喜爱的搜索引擎。