Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильный вызов CharToOem 
V
    Опции темы
AxNe0
Дата 18.10.2006, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: нет
Всего: 5



Привет всем! У меня простенький вопрос. Имеется нерабочий код:
Код
char* Rus(const char* text)
{
    char RusBuf[256];
    CharToOem(text,RusBuf);
    return RusBuf;
}

Компилятор пишет:
Цитата
error C2664: 'CharToOemW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Как можно правильно преобразовать char* в LPCWSTR и вызвать функцию? И еще, объясните в чем разница между char, LPCWSTR, LPCSTR и т.д.  smile 


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
Damarus
Дата 18.10.2006, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(AxNe0 @  18.10.2006,  03:36 Найти цитируемый пост)
Как можно правильно преобразовать char* в LPCWSTR и вызвать функцию?

В данном случае проще напрямую вызвать ANSI версию CharToOem:
Код
char* Rus(const char* text)
{
    char RusBuf[256];
    CharToOemA(text,RusBuf);
    return RusBuf;
}


Цитата(AxNe0 @  18.10.2006,  03:36 Найти цитируемый пост)
И еще, объясните в чем разница между char, LPCWSTR, LPCSTR и т.д.

LPCWSTR - константный указатель на UNICODE строку.
LPCSTR - константный указатель на ANSI строку.

Добавлено @ 06:18 
Только возвращать указатель на локальный буфер нельзя.
PM MAIL ICQ Jabber   Вверх
AxNe0
Дата 18.10.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: нет
Всего: 5



спасибо, попробовал помогло, да не совсем.. smile
использу функцию в следующем виде:
Код
    float a,b,c;
    printf(Rus("\nПрограмма для решения квадратных уравнений вида: a*x^2+b*x+c=0\n\n"));
    printf(Rus("\nВведите a:\n"));
    scanf("%f",&a);
    printf(Rus("\nВведите b:\n"));
    scanf("%f",&b);
    printf(Rus("\nВведите c:\n"));
    scanf("%f",&c);

все отображается нормально, только самая первая строка какими-то иероглифами. В чем проблема?


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
Nastya
Дата 18.10.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Почему ироглифами не знаю, smile
Но     char RusBuf[256]; - лучше объявите как static


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
AxNe0
Дата 18.10.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: нет
Всего: 5



решение найдено в следующем виде:
Код
....
         printf("\n");
    printf(Rus("Программа для решения квадратных уравнений вида:"));
    printf(" a*x^2+b*x+c=0\n\n");
.....



--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
bsa
Дата 18.10.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Тебе Nastya указала на явную ошибку в программе. Исправь ее. Так как у тебя сейчас происходит передача указателя на уничтоженный массив.
PM   Вверх
Romikgy
Дата 18.10.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



или так 
Код

char RusBuf[256];
float a,b,c;

char* Rus(const char* text, char *RusBuf)
{
    
    CharToOemA(text,RusBuf);
    return RusBuf;
}

    printf(Rus("\nПрограмма для решения квадратных уравнений вида: a*x^2+b*x+c=0\n\n"));
    printf(Rus("\nВведите a:\n",RusBuf));
    scanf("%f",&a);
    printf(Rus("\nВведите b:\n",RusBuf));
    scanf("%f",&b);
    printf(Rus("\nВведите c:\n",RusBuf));
    scanf("%f",&c);



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
vinter
Дата 18.10.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



ф-ию оставить  в таком виде
Код

void  Rus(const char* text, char *RusBuf)    
{    
     
    CharToOemA(text,RusBuf);    
 
}

или вообще ее убрать...


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2349 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.