【问题标题】:C++: Does the Null get stored when storing a char array in a textfile?C++:在文本文件中存储 char 数组时是否会存储 Null?
【发布时间】:2012-09-03 14:31:06
【问题描述】:

看看这段代码

ofstream obj("output.txt");
obj<<"Hello World";

这里我向文本文件“output.txt”发送char数组“Hello World”

现在 char 数组的末尾有一个终止的 null。

所以当我将 char 数组发送到文本文件“output.txt”时,终止的 null 是否也被发送和存储,为什么?

【问题讨论】:

  • 您可以使用十六进制编辑器轻松检查。

标签: c++ arrays char fstream ofstream


【解决方案1】:

考虑如果你多次写入文件会发生什么:

ofstream output("myfile.txt");
output << "Hello";
output << " ";
output << "world";

如果每次写入文件时都添加了字符串终止符,那么当您第二次写入时,系统将不得不在文件中找到零,将其删除,然后在新文本之后再次添加。此外,系统必须以不同的方式实现输出,例如控制台。

所以回答你的问题:不,终结符没有写。它仅用于内存中的字符串,以便函数知道字符串在内存中的结束位置。

【讨论】:

  • 补充一下,如果你使用output.write(),那么根据你的调用方式,你想怎么写null都可以。
  • @RobertMason 如果字符串不是文字,而是std::string,它们也可以包含空字符。
  • @RobertMason 当然,但是决定编写它的是,而不是底层系统。
【解决方案2】:

没有。空终止正是 C/C++ 用来知道字符串在哪里结束的。

请注意,让它在您真正想要的字符之后写入一个 0x00 字节将是一个非常烦人的失控。然后,只写你想要的字符会有点麻烦。

【讨论】:

  • 如果“C/C++”是指“处理以零结尾的字符串的函数”。
  • @MikeSeymour 我想我的意思是这就是 C 标准定义字符串的方式,尽管你肯定是对的,它只与处理它们的函数相关。在 C++ 中,这不会像在 C 中那样普遍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多