Могут ли возникнуть проблемы с работой со строками если использовать не char* /const char*, а unsigned char*/const unsigned char*?
Если все правильно, к примеру, в UTF-8, каждый символ имеет свой индекс в диапазоне от 1-255. В случае в char* диапазон будет другой.
Несмотря на то, что 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
Иначе, результатом может быть неопределённое поведение.
В UTF8 символы не имеют индекса в диапазоне 1-255, а занимают от 1 до 6 байт с переносом. Для строк в кодировке UTF8 С++20 вводит отдельный тип char8_t.
Продвижение своими сайтами как стратегия роста и независимости