0

我正在维护一个 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 值的文件的方法?

4

1 回答 1

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(空终止)字符串那样使用。在这里,我分配了一个包含 10 个 NULL 字节的字符串。然后输出这些,因为字符串长度为 10。

于 2012-08-08T22:01:27.457 回答