@daniil14056

С++. при возвращении массива string::c_str() происходит что-то не понятное?

visual studio.
В онлайн компиляторе все норм

char *  readLine() {
	std::string line = "";
	char *buf = new char[1];
	do {
		int reads_bytes = sock->recv(buf, 1);
		if (reads_bytes <= 0) error("close");;
		line.push_back(buf[0]);

	} while (buf[0] != '\n' );

	std::cout<< (char *)line.c_str()<<"\n"; // Response    - все норм
	return (char *)(line.c_str());

}
// вызывается тут
while (true) {
		char * line ;
		 line= cl->readLine();
		 std::cout << line[0] << line[1] << line[2] << std::endl;// ese  -  на один байт сместилось
		std::cout << line << std::endl;//        ╠╠╠╠╠╠╠╠    - а это откуда, как??????????
	}
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В онлайн компиляторе все норм

lol.

Я в твой код комментариев добавил, для ясности:

char *  readLine() {
  std::string line = "";
  ...
  std::cout<< (char *)line.c_str()<<"\n"; // Response    - все норм
  return (char *)(line.c_str());
  // в этот момент line уничтожается, и вместе с ним становятся недействительными
  // указатели полученные функцией c_str()
}

Возвращай std::string, не мудри.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы