0

我有一个程序可以读取包含以下列表的 .DAT 文件:

removepeer 452
addpeer 6576
removepeer 54245

在某些时候,它会读出垃圾文字:H。</p>

这是我发现错误的代码的一部分:

getline(abc, info, '\n'); //data here displays pretty fine

int count = info.size();

char text[count];

for(int a=0; a<count; a++){
    text[a] = data[a];
}
cout << text << endl; //Some rubbish text found in some printout!

它打印出最后一行,然后是一些垃圾文本

4

1 回答 1

4

text数组不会以 null 结尾,这在使用operator<<with时是必需的,char[]因为它们被视为以 null 结尾的 c 样式字符串。内存中的随机字符将被写入,直到偶然找到一个空终止符。从技术上讲,超出数组范围的访问是未定义的行为。

要更正,请将空终止符附加到text. 由于您的编译器作为可变长度数组的扩展(不是标准 C++,但在 C99 中),您可以将其更改为:

char text[count + 1];

// snip...

text[count] = 0;

话虽如此,我不确定您为什么要从std::string实例复制到char[]. std::string实例也可以使用operator<<.

于 2013-02-05T13:03:31.027 回答