c++ stringstream到char*的转换内存分配

C++ stringstream to char* conversion memory allocation

本文关键字:转换 内存 分配 stringstream char c++      更新时间:2023-10-16

谁能解释一下下面的代码是如何工作的,是否使应用程序崩溃?

int main() {
    char *tempStr = new char[5];
    tempStr[0] = '';
    string stemp = "helloworld";
    stringstream sstream;
    sstream.str(stemp);
    cout << "len before = " << strlen(tempStr);
    sstream >> tempStr;
    cout << "len after = " << strlen(tempStr) << endl;
    cout << tempStr << endl;
    delete[] tempStr;
    return 1;
}
我得到的输出是
len before = 0
len after = 10
helloworld
  1. stringstream是否为char指针中的额外字符分配内存?
  2. 还想知道从stringstream复制数据到char*数组的正确方法,而不超过char*分配的内存?

stringstream是否为char指针中的额外字符分配内存?

。你的代码调用了未定义的行为。

还想知道从字符串流复制数据到char*数组的正确方法,而不超过分配给char*的内存?

阅读char*不是一个好主意。使用std::string从流中读取输入。但是,如果你仍然想知道为了知识,使用std::istream::read()

if ( sstream.read(tempStr, 5 ) )
{
   //read succeeded
}

顺便说一下,你可以合并这两行:
stringstream sstream;
sstream.str(stemp);

成一个:

stringstream sstream(stemp);

或者简写为:

stringstream sstream("helloworld"); //no need of stemp!

希望对你有帮助。

  1. 。您覆盖了内存,调用了未定义的行为,但没有发生明显的事情,因此没有注意到错误。没有要求做这样的事情应该触发任何人类可见的错误或特殊动作,因此措辞未定义行为
  2. 你将不得不一块一块地做它,并重新分配char数组,如果它耗尽了空间。在c++中,手工执行这些操作没有什么意义。只要使用std::string就可以了。