C ++返回字符串不断变得垃圾

时间:2013-04-08 23:36:06

标签: c++ file buffer

为什么这里的返回字符串上有各种各样的垃圾?

string getChunk(ifstream &in){
char buffer[5];
for(int x = 0; x < 5; x++){
    buffer[x] = in.get();
    cout << x << " " << buffer[x] << endl;
}
cout << buffer << endl;
return buffer;
}

ifstream openFile;
openFile.open ("Bacon.txt");
chunk = getChunk(openFile);
cout << chunk;

我在字符串中得到了一堆垃圾,尽管我的调试说我的缓冲区正在填充正确的字符。

谢谢,c ++比Java要难得多。

1 个答案:

答案 0 :(得分:4)

您需要NULL终止缓冲区。使缓冲区大小为6个字符,并将其初始化为零。正如您现在所做的那样只填充前5个位置,单独留下最后一个位置。

char buffer[6] = {0};  // <-- Zero initializes the array
for(int x = 0; x < 5; x++){
    buffer[x] = in.get();
    cout << x << " " << buffer[x] << endl;
}
cout << buffer << endl;
return buffer;

或者,保持数组大小相同,但使用char *的{​​{3}}和字符数来从源字符串中读取。

char buffer[5];
for(int x = 0; x < 5; x++){
    buffer[x] = in.get();
    cout << x << " " << buffer[x] << endl;
}
cout << buffer << endl; // This will still print out junk in this case
return string( buffer, 5 );