>простите, признаюсь что тупо напал на strlen.
>вы меня не совсем поняли. я говорю о том, как на самом
>деле определена функция, пусть не posix'ом, то хотя бы большим количеством
>описаний в сети. прочитайте его еще раз. написана она в соотв.
>с теми требованиями, которые были к ней до этого, своего ничо
>не добавлял ;) т.о. задачу по реализации считаю выполненной правильно. ОК
>
>если у клиента другая кодировка, то (раз уж мы работаем с содержимым строк как с символами, а не как с байтами туда-обратно) при "не той" кодировке "перестанет" работать и весь clib, так ?
нет перстанет работать контекст-зависимая часть функций, т.к. строка (char*) остается нуль-терминированной (до тех пор пока туда не начнут пихать совсем черт знает что), т.е. всякие strcmp, strcpy, работать будут.
> для выбора другой локали есть setlocale(), utf-8 же clib'ом поддерживается только через mbs->wcs, и функции работы с wcs имеют одноименный префикс. где уж это мой недочет ? если программист _действительно_ планирует работу с толстыми буквами, то ему нужно подумать об этом заранее, а не ругать имеющиеся средства. то есть конвертим utf8 в wcs и применяем wcslwr/towlower. с ucs4 конечно на clib'е тяжелее.
Верно, и думать надо т.к. сейчас основной кодировкой становится utf-8, а с strlwr-ориентированными решениями будет беда.
>
>насчет локали. если setlocale() вызвана с верным аргументом, то для любой 8-битной
>кодировки tolower() вернет правильное значение, даже для utf8 (т.к. utf8 в
>плане однобайтных символов идентична 7-bit ascii, и ни одна русская буква
>не попортится). и разумеется *str*lwr не обратит неаскёвую часть.
Вот-вот для utf-8 функция например вообще не работает, преобразование будет не выполнено. А это явно не то что хотелось бы.
>
>избитый нами int tolower(int) принимает в нашем контексте всегда не более чем
>char; в мануале сказано, что если "c is not an unsigned
>char value, or EOF, the behaviour of these functions is undefined.",
>иначе оно возвращает int, который без потерь кастится в char. тут
>опять не вижу проблем в применении.
в данном конкретном случае да.