Может кто-нибудь объяснить, как работает и работает следующий код не вылетать приложение?
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
выделить память для дополнительных символов в указателе символа? stringstream
в массив char *, не превышая объем памяти, выделенной для char*
?Выделил ли stringstream память для дополнительных символов в указателе символа?
Нет. Ваш код вызывает неопределенное поведение.
Также хотите узнать правильный способ копирования данных из 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!
Надеюсь, это поможет.
char
массив, если ему не хватает места. В C ++ нет никакого смысла делать это вручную. Просто используйте std::string
и будет сделано.