unsigned char* и char* при работе со строками

118
18 декабря 2020, 02:30

Могут ли возникнуть проблемы с работой со строками если использовать не char* /const char*, а unsigned char*/const unsigned char*? Если все правильно, к примеру, в UTF-8, каждый символ имеет свой индекс в диапазоне от 1-255. В случае в char* диапазон будет другой.

Answer 1

Несмотря на то, что char, unsigned char и signed char - это три разных типа, представление простого char может быть как знаковым, так и беззнаковым. Это определяется реализацией компилятора. Поэтому говорить о каких-то проблемах можно лишь с учётом конкретного компилятора и функции, обрабатывающей массив таких символов (строк в данной интерпретации). Например, для функций из <cctype>, в частности std::isalnum требуется чтобы символ был представим диапазоном unsigned char и для безопасного использования требуется соответствующее приведение типа:

To use these functions safely with plain chars (or signed chars), the argument should first be converted to unsigned char

Иначе, результатом может быть неопределённое поведение.

Answer 2

В UTF8 символы не имеют индекса в диапазоне 1-255, а занимают от 1 до 6 байт с переносом. Для строк в кодировке UTF8 С++20 вводит отдельный тип char8_t.

READ ALSO
500 (Internal Server Error)

500 (Internal Server Error)

Имеется форма с двумя выпадающими списками и одной кнопкойПо нажатию на кнопку отправляются данные в виде json, на основе этих данных выполняется...

149
encodeURIComponent синтаксис

encodeURIComponent синтаксис

Как правильно кусок кода засунуть в encodeURIComponent при отправке ajax запроса?

129
Ошибка datepicker и laravel 5.8

Ошибка datepicker и laravel 5.8

Привет пример реализации брал от сюда: Пример реализации У меня в blade выглядит код вот так:

140