Фон: Я получаю массив как char * как часть сеанса сокета. Теперь нам нужно сопоставить токены (заголовки HTTP). Из этого следует, что мы создали UBYTE * и получаем значение из массива char после приведения типов в UBYTE. Позже тот же указатель UBYTE мы переходим к другой функции, которая принимает char * после приведения ее в соответствие с char *.Тип casting между char * и UBYTE * (unsigned char *)
Проблема здесь, это работает в выпуске сборки, а не в сборке отладки (с -g и другой оптимизацией). Не только это добавление нескольких отпечатков в режиме отладки скрывает проблему.
Итак, моя очередь здесь. В чем разница между указателем UByte (который по существу является символом unsigned) и указателем char. Изменение UByte на char решает мою проблему во всех режимах, но у меня нет объяснений по тому же поводу? Есть предположения ?
@R., Немного коррекции, наличие 'unit8_t' предписана POSIX, а не по С. –
C гарантирует, что существует, если 8bit существует целочисленный тип. Если нет 8-битного типа, то также невозможно определить свой собственный «UBYTE». Поскольку этот вопрос связан с обработкой заголовков HTTP, целью является почти наверняка платформа, оборудованная для работы с сетевыми блоками данных (байты). 'CHAR_BIT! = 8' - это действительно патология, о которой не стоит упоминать. Это никогда не будет происходить, за исключением DSP и grandfathered-in унаследованных машин, которые никогда не станут мишенями для переносных программ. –
@R, что они назвали его UBYTE, не означает, что он имеет ширину 8. Он показывает только то, что они ожидают. –