Форум — Development [C] спецификаторы и кириллица c 0 2 Текст топика ниже (забыл указать LORCODE, а изменить нельзя) Ссылка
Пусть дан код: #include <stdio.h> int main() { printf("|%10.10s|\n", "hello"); printf("|%10.10s|\n", "даров"); return 0; } Вывод будет следующий: | hello| |даров| Т.е игнарируются префикс перед спецификатором. Как решить данную проблему? sol_linux ★★ (14.08.10 14:39:59 MSK) автор топика Показать ответы Ссылка
Ответ на: комментарий от sol_linux 14.08.10 14:39:59 MSK gcc 1.c 14:44 /tmp ./a.out | hello| | даров| ?Полностью скопировал ваше: cat 1.c #include <stdio.h> int main() { printf("|%10.10s|\n", "hello"); printf("|%10.10s|\n", "даров"); return 0; } Eddy_Em ☆☆☆☆☆ (14.08.10 14:44:37 MSK) Показать ответы Ссылка
Ответ на: комментарий от Eddy_Em 14.08.10 14:44:37 MSK у него UTF-8 phoenix ★★★★ (14.08.10 14:45:55 MSK) Ссылка
Ответ на: комментарий от Eddy_Em 14.08.10 14:44:37 MSK Думаю, проблема в вашем случае в том, что у вас локаль двухбайтная. Eddy_Em ☆☆☆☆☆ (14.08.10 14:46:42 MSK) Ссылка
Ответ на: комментарий от sol_linux 14.08.10 14:39:59 MSK Он не игнорируется, просто работает с однобайтовым ASCII в котором ваше 'даров' занимает 10 символов. Нужно смотреть в сторну wprintf() mikki (14.08.10 15:01:33 MSK) Ссылка
Ответ на: комментарий от sol_linux 14.08.10 14:39:59 MSK Хорошим тоном является использование только латиницы в выводе. Вся локализация делается через gettext или что-нибудь подобное. GArik ★★★ (14.08.10 15:29:24 MSK) Ссылка
Ответ на: комментарий от Eddy_Em 14.08.10 14:44:37 MSK Не могли бы вы показать locale? sol_linux ★★ (14.08.10 16:51:15 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от sol_linux 14.08.10 16:51:15 MSK locale LANG=ru_RU.KOI8-R LC_CTYPE="ru_RU.koi8-r" LC_NUMERIC="ru_RU.koi8-r" LC_TIME="ru_RU.koi8-r" LC_COLLATE="ru_RU.koi8-r" LC_MONETARY="ru_RU.koi8-r" LC_MESSAGES="ru_RU.koi8-r" LC_PAPER="ru_RU.koi8-r" LC_NAME="ru_RU.koi8-r" LC_ADDRESS="ru_RU.koi8-r" LC_TELEPHONE="ru_RU.koi8-r" LC_MEASUREMENT="ru_RU.koi8-r" LC_IDENTIFICATION="ru_RU.koi8-r" LC_ALL=ru_RU.koi8-r Eddy_Em ☆☆☆☆☆ (14.08.10 18:26:22 MSK) Ссылка
Пример с wide char: #define _ISOC99_SOURCE #include <stdio.h> #include <wchar.h> #include <locale.h> #include <stdlib.h> int main(void) { if(setlocale(LC_ALL,"") == NULL) { return 1; } wprintf(L"|%10.10s|\n","hello"); wprintf(L"|%10.10s|\n","даров"); return 0; } $ ./test | hello| | даров| edigaryev ★★★★★ (14.08.10 19:08:59 MSK) Ссылка