【发布时间】:2013-08-14 08:30:23
【问题描述】:
我有一个std::wstring,其大小为 139,580,199 个字符。
为了调试,我使用以下代码将其打印到文件中:
std::wofstream f(L"C:\\some file.txt");
f << buffer;
f.close();
之后注意到缺少字符串的结尾。创建的文件大小为 109,592,584 字节(“磁盘大小”为 109,596,672 字节)。
还检查缓冲区是否包含空字符,这样做:
size_t pos = buffer.find(L'\0');
期望结果是std::wstring::npos,但它是18446744073709551615,但我的字符串末尾没有空字符,所以可能没问题。
谁能解释一下,为什么我没有将所有字符串都打印到文件中?
【问题讨论】:
-
关于 find,你是说你的缓冲区没有以 \0 结尾,所以 find 超出了结尾?
-
如果缓冲区是
wstring,则不必在其中包含L'\0'。我希望我们不能使用find来定位基本字符数组中的东西[至少在 1.4MB 时不能]。 -
Expecting result to be std::wstring::npos but it is 18446744073709551615为什么你认为这不是std::wstring::npos? -
@Mats: 实际上是 133MB,但是为什么你认为“我们不能使用
find来定位基本字符数组中的东西”? -
@LightnessRacesinOrbit 基本字符数组 (
char[]) 没有成员函数find。 (但这里没有基本的 char 数组。虽然他实际上并没有显示buffer的定义,但周围的文字清楚地表明它是一个std::wstring。)
标签: c++ ofstream wstring wofstream