【发布时间】:2011-06-23 01:03:26
【问题描述】:
我在 Windows 7 上使用 C++、Visual Studio 2010 Premium,在我的应用程序中,我有一个 std::string 变量在追加时失败:( ...
情况是,字符串变量包含在不同时间附加的大量字符,第一次添加例如 7609 字节,第二次添加 8184,最后添加 1463,类似于
std::string str;
long bytesRead;
char buffer[BUFFER_SIZE];
do {
bytesRead = ReadChars(buffer, BUFFER_SIZE -1);
buffer[bytesRead] = 0; // I omitted this line before, but it was in the original code
if (bytesRead > 0)
str += buffer; // I'm already taking care of the char 0 at the end :)
} while (bytesRead > 0);
所以每次我调用 +=(或附加,相同的结果)时,它都会附加一个额外的字符串(例如原始缓冲区的最后 7 或 8 个字符)
原始缓冲区结束 “附加字符串”
追加后,str结束 “附加的字符串”
有谁知道这是否是一个已知问题?或者如果我错过了什么
我把它放在下面的 cmets 中,但如果我把它也放在这里可能会更好
ReadChars:读取一串字符并返回读取的字节数
bytesRead:如果读取,则 > 0...所以可以将缓冲区视为 ASCIIZ,
我尝试了附加功能,但获得了相同的行为(比如这个 str.append(buffer); )
问候 豪尔赫
【问题讨论】:
-
你是如何处理缓冲区末尾的字符 \0 的?如果你不这样做,那看起来就像结果。请出示您的代码,不要遗漏任何重要内容。
-
你能发布ReadChars的实现吗?几乎可以肯定,该错误在于该函数对
buffer的处理 -
您可能将空字符放在
buffer中的错误偏移处 -
我按照您的建议将 char 0 添加到示例中,如果您想知道,是的,它在原始代码中:)
标签: c++ string visual-studio-2010 windows-7