存储NUL字符(ASCII 0)

时间:2010-10-03 00:42:41

标签: c++ string char fstream null-character

我用C ++创建了一个程序,它提示用户输入文件名和所请求的文件大小。程序检查请求的文件大小是否大于实际文件大小,然后在文件末尾添加空字符(代码为0的字符),直到达到请求的文件大小为止。
我这样做了(用fstream):

for (blah blah) {
    file << '\0'; // ('file' is an fstream object)
}

它就像我想要的那样工作。我知道这是一个糟糕的代码,因为它可能通过向它发送许多调用来折磨硬盘(顺便说一下它很慢)。这只是出于测试原因。然后,由于这个问题,我决定创建一个存储NUL字符的变量,并立即将整个变量保存到文件中(不单独保存每个字符)。
然后问题出现了...因为NUL字符(也称为null-terminator),终止字符串,我无法以任何方式存储这些零。
我已经尝试了一系列字符,一个字符串甚至一个字符串流,但没有一个工作(stringstream有一些有趣的东西,当我使用它时,文件的内容看起来像这样:0x47c274)。无论如何,它没有像我预期的那样工作 有没有有效的方法来存储空字符数组?

2 个答案:

答案 0 :(得分:2)

将它们存储在一个字符数组中,并使用ostream::write将数组写入文件。

答案 1 :(得分:2)

以下是一个例子:

#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  ofstream fout("pokemon");
  char buffer[1000];
  std::fill(buffer, buffer + 1000, '\0');
  fout.write(buffer, sizeof(char) * 1000);
  return 0;
}