Как превратить потоковый вывод в строку?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

paolo64
Сообщения: 30
Зарегистрирован: 21 сен 2015, 13:30

Добрый день!

Опять проблема с потоковым выводом...

Код: Выделить всё

res = stmt->executeQuery("SELECT id, label FROM test ORDER BY id ASC");
while (res->next()) {
// You can use either numeric offsets...
cout << "id = " << res->getInt(1); // getInt(1) returns the first column
// ... or column names for accessing results.
// The latter is recommended.
cout << ", label = '" << res->getString("label"); << "'" << endl;
}
Как можно превратить res->getString("label"); в обычную строку char??

С уважением,
Павел.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

ResultSet::getString возвращает std::string, а для этого типа оператор вывода в поток перегружен, так что всё должно работать без каких-либо дополнительных ухищрений.

Подозреваю, что ошибка компиляции, на самом деле, возникает из-за лишней точки с запятой, поставленной после res->getString("label").
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
paolo64
Сообщения: 30
Зарегистрирован: 21 сен 2015, 13:30

Romeo писал(а):ResultSet::getString возвращает std::string, а для этого типа оператор вывода в поток перегружен, так что всё должно работать без каких-либо дополнительных ухищрений.

Подозреваю, что ошибка компиляции, на самом деле, возникает из-за лишней точки с запятой, поставленной после res->getString("label").

Да этот пример компилируется нормально.
Мне нужно только превратить res->getString("label") в строку дальнейшей обработки. Я честно говоря никогда не работал с потоками... :(
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Так а при чём тут потоки? Поток - это std::cout. Как раз для того, чтобы вывести в него std::string никаких знаний по потокам не требуется, так как всё уже реализовано. Результат, возвращаемый ResultSet::getString имеет тип std::string и это всего лишь удобная обёртка для строки, не имеющая никакой связи с потоками.

Какая именно дальнейшая обработка подразумевается с возвращённой строкой и в какую "другую" строку имеется желание превратить std::string? В обычную C-шную? А зачем? Методы класса std::string практически полностью покрывают весь набор функций для работы с обычными С-строками. Почему не воспользоваться методами класса?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
paolo64
Сообщения: 30
Зарегистрирован: 21 сен 2015, 13:30

Romeo писал(а):Так а при чём тут потоки? Поток - это std::cout. Как раз для того, чтобы вывести в него std::string никаких знаний по потокам не требуется, так как всё уже реализовано. Результат, возвращаемый ResultSet::getString имеет тип std::string и это всего лишь удобная обёртка для строки, не имеющая никакой связи с потоками.

Какая именно дальнейшая обработка подразумевается с возвращённой строкой и в какую "другую" строку имеется желание превратить std::string? В обычную C-шную? А зачем? Методы класса std::string практически полностью покрывают весь набор функций для работы с обычными С-строками. Почему не воспользоваться методами класса?

Я всю жизнь работал только с обычные с-шными строками. Мне уже очень много лет (52), перестраиваться...

"Так какую кнопку мне нажимать" (Кин Дза-Дза).

С уважением,
Павел.
paolo64
Сообщения: 30
Зарегистрирован: 21 сен 2015, 13:30

"Так какую кнопку мне нажимать?" (Кин Дза-Дза)

Я всю жизнь работал с обычными С-шными строками....
Подскажите как изменить программу, что бы результат res->getString("label"); превратился в обычную С-шную строку.

С уважением,
Павел.
paolo64
Сообщения: 30
Зарегистрирован: 21 сен 2015, 13:30

Дело в том, что я переделываю уже написанную программу под новый интерфейс вывода данных MySQL. А переделывать всю обработку во всех текстах.... Это жжжуть....
Вот.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Если вам очень хочется в С-шную строку преобразовать, то можно сделать так:

Код: Выделить всё

char str[256];
strncpy(str, ret->getString("label").c_str(), 256);
Но я всё же настоятельно рекомендую не выполнять никаких преобразований и работать с std::string дальше. Это более правильно и с точки зрения производительности приложения (отказываемся от лишнего копирования), и с точки зрения удобства. Если вы расскажете, какая именно обработка строки предполагается, я подскажу какие методы вызвать - в этом действительно нет ничего сложного. А на счёт перестраиваться вы не правы, как мне кажется. Глоток нового полезен в любом возрасте :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

paolo64 писал(а):Дело в том, что я переделываю уже написанную программу под новый интерфейс вывода данных MySQL. А переделывать всю обработку во всех текстах.... Это жжжуть....
Вот.
Тогда вы правы. Нужно делать преобразование.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
paolo64
Сообщения: 30
Зарегистрирован: 21 сен 2015, 13:30

Romeo писал(а):Тогда вы правы. Нужно делать преобразование.

Аааа!!!! Заработало....!!!!

Спасибо Вам большое!!!!

С искренним уважением,
Павел.
Ответить