|
Текстовая строка без нулевого байта, как избавиться от terminating null? |
|
|
|
Jun 21 2009, 14:35
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(sensor_ua @ Jun 21 2009, 17:40)  Если это единый текстовый "блок", то может быть удобной передача его как одной строки. Тогда можно записать это одной строкой, но "не совсем обычным способом"(С) (дальше было "- в кредит и за советские рубли"): Код const char descriptor[]= "Строка 1" "Строка 2" "Прибамбас" "Фишечка"; Прикольно  Нет, там не только текст, ещё байт длины и байт типа дескриптора. Вообще не очень удобно в Си (и в Си++) со структурами, в которых данные могут иметь различную длину, не известную на момент декларирования структуры, но известную после присваивания ей значения. Язык требует указания точного значения прямо во время декларирования...
|
|
|
|
|
Jun 21 2009, 15:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Вообще не очень удобно в Си (и в Си++) со структурами, в которых данные могут иметь различную длину, не известную на момент декларирования структуры, но известную после присваивания ей значения. Язык требует указания точного значения прямо во время декларирования... Насчёт плюсов не скажу, но не был бы так категоричен. В Си действительно с этим сложновато. В C99 появились массивы переменной длины. Такой массив размещается в конце структуры. И с sizeof введены изменения насчёт рантайма. Посмотрите, авось чего получится ЗЫ. Если байт длины описывает длину дескриптора, то, ИМХО, это поле лишнее.
--------------------
aka Vit
|
|
|
|
|
Jun 21 2009, 19:37
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(sergeeff @ Jun 21 2009, 22:42)  Не проще ли написать функцию, которая в качестве параметра получают обычную С-строку и сама затем преобразует в unicode строку и заполняет все необходимые поля usb дескриптора. Я так понимаю, вам это часто приходится проделывать? Да нет, не часто. Но нужно будет время от времени. Тоже думал про отдельную функцию, но решил, что всё же она лишняя. ЗЫ: слава богу ещё, что USB дескрипторы сформатированы в little endian, а то недавно осваивал карты памяти - там сплошной big endian. Вот где полная задница - компиляторы не имеют механизма смены "индейца", как результат - полная неработоспособность структур с битовыми полями - всё пришлось делать ручками...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|