0

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

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 难多了。

4

1 回答 1

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;

或者,使数组大小保持不变,但使用字符串构造函数,该构造函数接受 achar *和字符数从源字符串中读取。

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 );
于 2013-04-08T23:40:11.977 回答