Скрестить crt и stl
От: loknalori Россия  
Дата: 10.12.07 17:13
Оценка:
Хочется написать что-то типа
std::string a;
strcpy((char*)&back_inserter(a),"текст");

Т.е. есть строковый контейнер, оборачиваем в инсертер, и ЭТО передаем в crt ф-ии копирования.

Есть стандартные варианты решения вопроса?
Re: Скрестить crt и stl
От: . Великобритания  
Дата: 10.12.07 17:47
Оценка:
loknalori wrote:

> strcpy((char*)&back_inserter(a),"текст");

В таком виде никак, невозможно узнать длину буфера.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Скрестить crt и stl
От: serg_joker Украина  
Дата: 10.12.07 17:52
Оценка:
Здравствуйте, loknalori, Вы писали:
Ну,
 
std::string a;
a = "текст";
, например.

Если хочется ответа на другой конкретный вопрос, то его, другой конкретный вопрос, нужно и задавать. А так получается "доктор, у меня что-то болит..." (с).

PS. В общем случае, нет, нельзя.

L>Хочется написать что-то типа

L>
L>std::string a;
L>strcpy((char*)&back_inserter(a),"текст");
L>

L>Т.е. есть строковый контейнер, оборачиваем в инсертер, и ЭТО передаем в crt ф-ии копирования.

L>Есть стандартные варианты решения вопроса?
Re: Скрестить crt и stl
От: Biopower  
Дата: 10.12.07 18:00
Оценка:
Здравствуйте, loknalori, Вы писали:

L>Хочется написать что-то типа

L>
L>std::string a;
L>strcpy((char*)&back_inserter(a),"текст");
L>

L>Т.е. есть строковый контейнер, оборачиваем в инсертер, и ЭТО передаем в crt ф-ии копирования.

L>Есть стандартные варианты решения вопроса?


Не совсем понял что нужно получить, но для того чтобы реализовать взаимодействие сишных функций со стандартными контейнерами можно использовать std::vector, например так:

std::vector<char> str;
str.resize(5);
strcpy(&str[0], "test");
std::string a(str.begin(), str.end());
Re[2]: Скрестить crt и stl
От: loknalori Россия  
Дата: 10.12.07 20:15
Оценка:
Здравствуйте, serg_joker, Вы писали:

_>Если хочется ответа на другой конкретный вопрос, то его, другой конкретный вопрос, нужно и задавать. А так получается "доктор, у меня что-то болит..." (с).


Куда конкретней-то? Ну, ок, переформулирую. Есть некая ф-я, работающая с указателями на ANSI строки (а именно, производящая запись в эту уже кем-то выделенную область памяти). Хочется передать этой функции нечто (понятно почему слово нечто, так обще?) из стл, обернутое вокруг стл контейнера типа string, чтобьы эта ф-я сама того не зная работала с контенером stl.

P.S. Предложения использовать вектора etc не катят т.к. смысл преливать с одного контенера в другой. Т.е. задача сделать ЭТО с минимумом посредников.

P.S.S. Я сам такой, пытаюсь додумывать вопрос, но иногда "Бывают сны, доченька, просто сны" (с) Анекдот
Re: Скрестить crt и stl
От: _nn_  
Дата: 10.12.07 20:33
Оценка:
Здравствуйте, loknalori, Вы писали:

L>Хочется написать что-то типа

L>
L>std::string a;
L>strcpy((char*)&back_inserter(a),"текст");
L>

L>Т.е. есть строковый контейнер, оборачиваем в инсертер, и ЭТО передаем в crt ф-ии копирования.

L>Есть стандартные варианты решения вопроса?


Вы правильно поставьте вопрос.

Чем std::copy вас не устраивает или банальное a = "текст" ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Скрестить crt и stl
От: Erop Россия  
Дата: 10.12.07 20:34
Оценка: +1
Здравствуйте, loknalori, Вы писали:

L>P.S. Предложения использовать вектора etc не катят т.к. смысл преливать с одного контенера в другой. Т.е. задача сделать ЭТО с минимумом посредников.


std::string пока не обязан хранить строку подряд в памяти... Так то, что ты хочешь недостижимо.

Мало того, в STL-way это ещё и не нужно. Почему тебе так надо хранить строку в std::string, а не в std::vector?

Нарисуй простенький классец вокруг std::vector, который возвращает итератор на начало и на конец без одного (зарад концевого нуля), или воспользуйся диапазоном из Boost. И эту штуку можно будет передавать в разнообразные алгоритмы stl, так что можно и не в строчке данные держать
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Скрестить crt и stl
От: loknalori Россия  
Дата: 10.12.07 20:46
Оценка: :)
Здравствуйте, Erop, Вы писали:

:-D Ну я, в общем, в курсе как можно еще сделать :-D Вопрос в общем сугубо академический... Хотелось именно ТАК
Re[3]: Скрестить crt и stl
От: astral_marine  
Дата: 10.12.07 22:32
Оценка:
L>Куда конкретней-то? Ну, ок, переформулирую. Есть некая ф-я, работающая с указателями на ANSI строки (а именно, производящая запись в эту уже кем-то выделенную область памяти). Хочется передать этой функции нечто (понятно почему слово нечто, так обще?) из стл, обернутое вокруг стл контейнера типа string, чтобьы эта ф-я сама того не зная работала с контенером stl.

Так std::string:c_str() подойдет, если использовать хак с преобразованием типа к char *, иначе — никак.
Еще как вариант написать свой простенький врапер над char * и юзать его — для переносимости.
Возможно лучше будет сделать обратное: STL код и алгоритмы относительно не сложно заставить работать с RTL строками.
Re[5]: Скрестить crt и stl
От: serg_joker Украина  
Дата: 11.12.07 18:58
Оценка: +1
Здравствуйте, loknalori, Вы писали:

L>Здравствуйте, Erop, Вы писали:


L>:-D Ну я, в общем, в курсе как можно еще сделать :-D Вопрос в общем сугубо академический... Хотелось именно ТАК

Сугубо академически: именно так — нет, нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.