Передача string в функцию как byte*
От: Аноним  
Дата: 17.06.11 10:32
Оценка:
есть функция вида int func(byte* str), которая возвращает строку в str. можно ли в функцию передать string как byte*?
Re: Передача string в функцию как byte*
От: chemey  
Дата: 17.06.11 10:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть функция вида int func(byte* str), которая возвращает строку в str. можно ли в функцию передать string как byte*?


В таких случаях надо пользоваться вектором:


vector<char> buf( BUFSIZE ); // размер буфера надо знать заранее
func( &buf[0] );
string result = &buf[0]; // подразумевается, что в строке нет нулевых байт, иначе юзаем assign()
Бзззззззжжжжж
Re[2]: Передача string в функцию как byte*
От: баг  
Дата: 17.06.11 14:56
Оценка:
Здравствуйте, chemey, Вы писали:

C>
C>vector<char> buf( BUFSIZE ); // размер буфера надо знать заранее
C>func( &buf[0] );
C>string result = &buf[0]; // подразумевается, что в строке нет нулевых байт, иначе юзаем assign()
C>

Судя по int, функция возвращает кол-во записанных символов. Если так, то проще:

string buf('\0', BUFSIZE);
int len = func(buf.data());
if(len > 0)
  buf.resize(len);
else
  buf.clear();


Не?
Re: Передача string в функцию как byte*
От: Centaur Россия  
Дата: 17.06.11 18:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть функция вида int func(byte* str), которая возвращает строку в str.


Почему у неё нет второго параметра, указывающего количество байт или символов, которые можно безопасно записать в буфер?
Re: Передача string в функцию как byte*
От: jyuyjiyuijyu  
Дата: 17.06.11 21:30
Оценка:
кстати в C char* и unsigned char* один тип и между собой конвертится
неявно очень удобно но в плюсах из за того что есть перегрузка по типам
сделали не совместимым возможено плюсисты и заявят что ничего удобного
но только лиш потому что сипипи схавал их мозг а мне вот в си очень это удобно
было а в сипипи потом мешала несовместимость но я понимаю зачем ее сделали
хотя скажите честно вы часто перегружаете по unsigned ? помоему вообще никогда
так какой смысл было делать типы несовместимыми ?
Re[2]: Передача string в функцию как byte*
От: jyuyjiyuijyu  
Дата: 17.06.11 21:47
Оценка:
даже в ostream такой код
template<class _Traits> inline
    basic_ostream<char, _Traits>& __CLRCALL_OR_CDECL operator<<(
        basic_ostream<char, _Traits>& _Ostr, unsigned char _Ch)
    {    // insert an unsigned char
    return (_Ostr << (char)_Ch);
    }

реализация только для char написана с скажите где вы и зачем
используете перегузку по unsigned ? очень интересно имело ли это вообще смысл
Re: Передача string в функцию как byte*
От: Mr.Delphist  
Дата: 20.06.11 12:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть функция вида int func(byte* str), которая возвращает строку в str. можно ли в функцию передать string как byte*?


Так, что ли?

func(s.c_str())


Покажите больше кода — будут более внятные советы
Re[3]: Передача string в функцию как byte*
От: quodum  
Дата: 20.06.11 13:03
Оценка:
Здравствуйте, баг, Вы писали:

баг>
баг>string buf('\0', BUFSIZE);
баг>int len = func(buf.data());
баг>if(len > 0)
баг>  buf.resize(len);
баг>else
баг>  buf.clear();
баг>


баг>Не?


Не-не. stding::data() возвращает const char*. Если добавить const_cast, то будет UB. Строки не обязаны храниться линейной цепочкой символов, и стандарт 2003 года старательно формулирует всё таким образом, чтобы data() могла возвращать одноразовую копию содержимого строки. В новом стандарте вроде-бы собирались приколотить гвоздями линейную организацию строк, но я не изучал, сделали ли.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.