std :: string buffer的奇怪行为

时间:2014-08-13 06:48:02

标签: c++ qt gcc std

我发现了std::string

的奇怪行为

我编译了下面的代码并在ubuntu上执行我得到了char缓冲区和std::string缓冲区的不同输出。

string m_fileName = "test.txt";
ifstream myfile;
myfile.open (m_fileName.c_str(), ios::out | ios::app | ios::binary);

string readBuffer="";
string fileContent = "";
char data[2048];
strcpy(data,"");

while(myfile.read((char *)readBuffer.c_str(),13)) {
    strcat(data,readBuffer.c_str());
    fileContent += readBuffer;
}

myfile.close();

QMessageBox msgBox;
msgBox.setText(fileContent.c_str());
msgBox.exec();

QMessageBox msgBox1;
msgBox1.setText(data);
msgBox1.exec();

std::string fileContent仅显示最后一行。 char数据显示整个文件内容。 ????

2 个答案:

答案 0 :(得分:2)

您正在写入未分配的内存。这是未定义的行为,任何事情都可能发生。

答案 1 :(得分:-1)

您需要更改代码的某些行,如下所示:

string m_fileName = "test.txt";
ifstream myfile;
myfile.open (m_fileName.c_str(), ios::out | ios::app | ios::binary);

char readBuffer[24];
string fileContent = "";
char data[2048];
strcpy(data,"");

while(myfile.read(readBuffer,13)) {
      strcat(data,readBuffer);
      fileContent.append(readBuffer);
      fileContent += readBuffer;
}

myfile.close();