如何在二进制模式下将NULL写入文件?

时间:2012-08-08 21:44:12

标签: c++ null filestream binaryfiles ofstream

我正在维护一个C ++方法,我的一个客户正在遇到问题。该方法应该将一系列标识符写出到由新行分隔的文件中。然而,在他们的机器上,某种方法是将一系列NULL写入文件。在二进制编辑器中打开文件表明它包含全部零。

我无法理解为什么会这样。我已经尝试将第一个字符集设置为0来分配空字符串和字符串。创建文件没有问题,只需将标识符写入其中。

以下是方法:

void writeIdentifiers(std::vector<std::string> IDs, std::string filename)
{   
    std::ofstream out (filename.c_str(), std::ofstream::binary);

    if (out.is_open())
    {
        for (std::vector<std::string>::iterator it = IDs.begin();
             it != IDs.end();
             it++)
        {
            out << *it << "\n";
        }
    }

    out.close();
}

我的问题:是否有任何可能的输入可以提供该方法,该方法将创建一个包含NULL值的文件?

1 个答案:

答案 0 :(得分:1)

是的,以下代码非常清楚地写了一系列NULL字节:

std::vector<std::string> ids;
std::string nullstring;
nullstring.assign("\0\0\0\0\0\0\0\0\0\0", 10);
ids.push_back(nullstring);
writeIdentifiers(ids, "test.dat");

因为std::string容器存储字符串长度,所以它不一定能以与普通C(以null结尾)字符串相同的方式使用。在这里,我分配一个包含10个NULL字节的字符串。然后输出那些因为字符串长度为10。