История изменений
Исправление Xenius, (текущая версия) :
Наличие защит от дурака уже другой вопрос.
Дело не столько в наличии защит от дурака, сколько в том, что когда ты пишешь на C, не допускать ошибок почти невозможно. А система типов в C довольно слабая, поэтому она тебе не поможет их выловить при компиляции и они пойдут в продакшн. Вот в ATS, который компилируется потом в C с этим получше. Если возможно, я бы вообще C не стал использовать.
Я спрашиваю: как перемещать указатель на N символов для юникода?
Если UTF-8, то всё просто, по байту можно определить, является ли он первым байтом символа или нет. Если UTF-16, то надо проверять, находится ли слово в диапазоне суррогатных пар, и если да, то проверить два соседних слова, если UTF-32, то просто увеличивать указатель, но эта кодировка очень уж много памяти жрёт.
Исходная версия Xenius, :
Наличие защит от дурака уже другой вопрос.
Дело не столько в наличии защит от дурака, сколько в том, что когда ты пишешь на C, не допускать ошибок почти невозможно. А система типов в C довольно слабая, поэтому она тебе не поможет их выловить при компиляции и они пойдут в продакшн. Вот в ATS, который компилируется потом в C с этим получше.
Я спрашиваю: как перемещать указатель на N символов для юникода?
Если UTF-8, то всё просто, по байту можно определить, является ли он первым байтом символа или нет. Если UTF-16, то надо проверять, находится ли слово в диапазоне суррогатных пар, и если да, то проверить два соседних слова, если UTF-32, то просто увеличивать указатель, но эта кодировка очень уж много памяти жрёт.