任何人都可以解释以下代码是如何工作的并且不会使应用程序崩溃吗?
int main() {
char *tempStr = new char[5];
tempStr[0] = '\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
stringstream
是否为char指针中的额外字符分配内存? stringstream
复制到char *数组的正确方法,而不会超出为char*
分配的内存?答案 0 :(得分:3)
stringstream是否为char指针中的额外字符分配内存?
没有。您的代码调用未定义的行为。
还想知道将数据从stringstream复制到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 :(得分:1)
char
数组空间不足时重新分配它。在C ++中,手动执行此操作几乎没有意义。只需使用std::string
即可完成。