[英]C++ stringstream to char* conversion memory allocation
谁能解释以下代码是如何工作的,并且不会使应用程序崩溃?
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指针中的多余字符分配了内存?
否。您的代码会调用未定义的行为。
还想知道在不超出为char *分配的内存的情况下将数据从stringstream复制到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!
希望能有所帮助。
char
数组。 在C ++中,手动执行此操作毫无意义。 只需使用std::string
完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.