gpt4 book ai didi

c++ - 当我以 "wb"模式写入文件时,会发生什么?

转载 作者:行者123 更新时间:2023-11-30 21:38:11 25 4
gpt4 key购买 nike

当我以“wb”模式将“asklfj123”写入文件时,然后在vim中打开它,为什么我仍然可以看到asklfj?但我在vim 中看不到123。我的意思是,当我以“wb”模式编写它时,程序不会将其转换为ASCII代码,但编辑器会以ASCII代码打开它,那么它在文本编辑器中应该是垃圾值,不是吗?那为什么我还能看到它们?

最佳答案

二进制模式意味着“不翻译任何内容”。

在“文本”模式(即“非二进制模式”)下,在某些系统上,例如换行符的表示在操作系统的文件表示和标准 '\n' 之间是不同的C 用于换行符表示。

在某些系统中还有特殊字符来表示文件结束。在文本模式下,这些字符分别被翻译并理解为换行符和文件结尾。

现在,以“二进制”模式编写文本就可以正常工作,而且我怀疑您的问题是其他问题 - 没有代码,就不可能回答什么问题。提到 vim 也让我认为你正在使用 Linux 或其他一些基于 Unix 的系统,其中换行符确实与 '\n' 相同,所以没有翻译是在这些系统中完成的。

编辑:

鉴于代码,这是典型的“未定义行为”,因为:

char test[30] = "adadsf123";
...
fwrite(test, sizeof(double), 6, fp);

fwrite 的参数是要写入的数据、每个成员的大小和项目数,最后是要写入的文件对象。

在本例中,给出一个 30 字节的字符串作为输入,然后使用 sizeof(double) 作为每个项目的大小,以及 6 个项目。由于 sizeof(double) 大于 30,因此会输出一些随机垃圾。随机垃圾是什么,取决于 test 变量之后内存中存储的内容。在发布的代码中,这似乎是 fp 变量。很难确切地说 fp 的值是多少。但是fwrite 正在按照它的指示执行操作,将二进制数据写入二进制文件。 ASCII 字符,在“二进制”中仍然会显示相同,'A' 的二进制代码是 01000001,并且会出现,如果解释为 ASCII 显示为 'A' - 并且 VIM 和 putc 会出现将其解释为 ASCII。

关于c++ - 当我以 "wb"模式写入文件时,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160671/

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