Viktor Vislobokov -> debian-russian@lists.debian.org @ Mon, 20 Dec 2004 10:44:13 +0500:
VV> Привет всем. VV> Я тут угрузился проблемой русских строк в UTF-8 локали. VV> Так уже писать нельзя VV> tmp = strdup("Проба"); VV> tmp1 = strndup(tmp, 3); VV> Потому что в tmp1 будет не "Про", а фиг него знает что. VV> strlen("Проба"); VV> вернёт вовсе не 5. VV> Да, есть в текушей libc такой чудный вещь как wchar.h VV> и соответствующие рутины типа wcsdup и т.д. Но старые VV> программы теперь в глубокой жо..? Те, которые полагали, что символ - это байт? (А приведенный выше пример - он именно такой.) Да, конечно, где еще они с таким подходом могут быть? Они, конечно, были спровоцированы языком C, но это их извиняет, а не спасает. VV> А если я хочу скажем в curses добавить полученный VV> мной через getch символ к строке, то как это сделать, VV> учитывая, что getch возвращает int, а строка имеет VV> типа w_chart *? VV> Как вообще теперь добавлять СИМВОЛ к СТРОКЕ? Раньше VV> было просто всегда работала конструкция вида: VV> char tmp[2]; VV> char *str; VV> tmp[1] = '\0'; VV> tmp[2] = 'А'; VV> strcat(str, tmp); Так уж и всегда? И никогда не падала с segmentation fault из-за выхода за границу массива во втором присваивании? А вообще - info libc, "Converting a Character" и иже с ним до просветления. -- Artem Chuprina RFC2822: <[EMAIL PROTECTED]>, FIDO: 2:5020/122.256, Jabber: [EMAIL PROTECTED]