Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Но при этом интересные вещи будут наблюдаться

Отправлено ReAl 02 мая 2007 г. 20:01
В ответ на: Поставьте шрифт "Terminal" для окон "Source" в закладке "Format" в Tools->Options и пишите по-русски сколько душе угодно. отправлено SM 02 мая 2007 г. 18:42

если в командной строке такой консольной программе подсунуть кириллический текст (например, имя файла), то по

printf("не могу открыть %s\n", filename);

слова "не могу открыть" будут в консоли выглядеть нормально, а имя файла - всё равно кракозябрами.
Аналогично - если в программе набрать

fopen("настройки.ini", "rt");

то реально существующий файл настройки.ini открыт не будет, так как будет сделана попытка имя, *уже* находящееся в дос-кодировке, преобразовать из W1251 в дос. Ну а при создании будет создано что-то в духе "- бваRcЄЁ.ini".

Что показали исследования :-)
Кириллицу из командной строки из OEM в W1251 перекодирует сама винда (собственно, командная строка - LPCmdLine - есть у любого приложения, хоть и оконного), а вот printf/scanf - не перекодирует.
Итого рекомендую:


#define OEM_BUF_SIZE 2048
void os_printf( const char *fmt, ...)
{
va_list argptr;
char buf[OEM_BUF_SIZE];

va_start(argptr, fmt);
vsprintf(buf, fmt, argptr);
va_end(argptr);

CharToOem( buf, buf);
printf( buf);
}


а в редакторе оставить виндовую кодировку.

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сложите три и три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru