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