Здравствуйте, Аноним, Вы писали:
А>есть функция вида int func(byte* str), которая возвращает строку в str. можно ли в функцию передать string как byte*?
В таких случаях надо пользоваться вектором:
vector<char> buf( BUFSIZE ); // размер буфера надо знать заранее
func( &buf[0] );
string result = &buf[0]; // подразумевается, что в строке нет нулевых байт, иначе юзаем assign()
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();
кстати в C char* и unsigned char* один тип и между собой конвертится
неявно очень удобно но в плюсах из за того что есть перегрузка по типам
сделали не совместимым возможено плюсисты и заявят что ничего удобного
но только лиш потому что сипипи схавал их мозг а мне вот в си очень это удобно
было а в сипипи потом мешала несовместимость но я понимаю зачем ее сделали
хотя скажите честно вы часто перегружаете по unsigned ? помоему вообще никогда
так какой смысл было делать типы несовместимыми ?
Здравствуйте, Аноним, Вы писали:
А>есть функция вида int func(byte* str), которая возвращает строку в str. можно ли в функцию передать string как byte*?
Не-не. stding::data() возвращает const char*. Если добавить const_cast, то будет UB. Строки не обязаны храниться линейной цепочкой символов, и стандарт 2003 года старательно формулирует всё таким образом, чтобы data() могла возвращать одноразовую копию содержимого строки. В новом стандарте вроде-бы собирались приколотить гвоздями линейную организацию строк, но я не изучал, сделали ли.