Проблема проста: значение sizeof ((u_char)) возвращает 8. Ошибка strlen.Как узнать длину содержимого uchar?
У меня такое ощущение, что u_char
- это unsigned char
, а value
определяется как u_char value[8]
Так что, мне кажется, выпопытка извлечь длину буфера, который не является NULL, завершен.Вот где strlen терпит неудачу.
Вот некоторые основы:
Учитывая код
unsigned char buf[2] = {'H', 'I'}; // not NULL terminated.
a.strlen (buf) даст неопределенные результаты, поскольку в буфере 'buf' нет завершающего NULL.
б.sizeof (buf [0]) даст 1 для любой реализации
c.sizeof (buf) даст 2, то есть размер памяти, зарезервированной для buf. * 1020 *
Если буфер не используется для представления строк (которые всегда заканчиваются на NULL), но это просто последовательность байтов, потенциально завершаемыхнекоторый маркер / страж, в таком случае, длина буфера должна быть рассчитана путем подсчета количества элементов перед стражем вручную (для цикла / while / do-while и т. д.).
Кстати, почемуне использовать std :: vector или std :: string?