Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод русских символов в консоль 
:(
    Опции темы
Mastodont
Дата 31.3.2010, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

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



Чтобы выводить русские буквы в консоли, написал функцию rustext()

Код

#include<iostream>
using namespace std;

#include<windows>

char rustext(char str)
{
   char buffer[1024];
   CharToOem(str, buffer);
   return buffer;
}

int main()
{
   cout << rustext("Строка") << endl;

   system("pause");
   return 0;
}


Но компилятор ругается
Цитата

[C++ Error] Unit1.cpp(9): E2034 Cannot convert 'int' to 'const char *'

return может использоваться только в int-функции?

Цитата

[C++ Error] Unit1.cpp(9): E2342 Type mismatch in parameter 'lpszSrc' (wanted 'const char *', got 'char')

Почему константа? ведь слова const я нигде не ставил. Наверное, "*" несет еще какуюто смысловую нагрузку?

Цитата

[C++ Warning] Unit1.cpp(10): W8075 Suspicious pointer conversion

Suspicious pointer conversion - подозрительный указатель преобразования, как я понял. Что это означает?

Цитата

[C++ Error] Unit1.cpp(10): E2034 Cannot convert 'char *' to 'char'

А здесь он что пытается преобразовать?

Цитата

[C++ Error] Unit1.cpp(15): E2342 Type mismatch in parameter 'str' (wanted 'char', got 'char *')

Несовпадение типа в параметре 'str'. А почему несовпадение? Везде ж char. Или здесь что-то другое имеется в виду?

Может, есть более удачный вариант решения моего вопроса?
PM MAIL   Вверх
KelTron
Дата 31.3.2010, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

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



Код

char* rustext(char* str)
{
   char buffer[1024];
   CharToOem(str, buffer);
   return buffer;
}

Можно и без буффера:
Код

char* rustext(char* str)
{
   CharToOem(str, str);
   return str;
}



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
ИванМ
Дата 31.3.2010, 19:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(KelTron @  31.3.2010,  19:23 Найти цитируемый пост)
char* rustext(char* str)
{
   char buffer[1024];
   CharToOem(str, buffer);
   return buffer;
}

так нельзя делать. buffer локальный массив.
PM MAIL   Вверх
KelTron
Дата 31.3.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

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



Цитата(ИванМ @  31.3.2010,  19:28 Найти цитируемый пост)
так нельзя делать. buffer локальный массив.

Ты прав, я на это не обратил внимания...

Добавлено через 11 минут и 57 секунд
Что то я уже сплю, оба варианта некорректны, вот правильный:
Код

char* rustext(char* str)
{
    char* buf = new char[strlen(str) + 1];
    CharToOemA(str, buf);
    return buf;
}



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
borisbn
Дата 31.3.2010, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



setlocale
тема уже тысячу раз обсуждалась


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ИванМ
Дата 31.3.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



borisbn, setlocale в билдере не работает. По крайней мере, в 6м.
PM MAIL   Вверх
borisbn
Дата 31.3.2010, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



ИванМ, как бы сказал Якубович: код в студию smile
P.S. под студией имеется ввиду не visual studio, а vingrad
на p.s. просьба не отвечать - шутю я так smile
P.P.S. В каждой шутке есть доля шутки smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ИванМ
Дата 31.3.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



borisbn, имеете ввиду показать как я пишу setlocale? Или показать как работает перекодировка в билдере?
PM MAIL   Вверх
borisbn
Дата 31.3.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



ИванМ, конечно первое


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ИванМ
Дата 31.3.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну например:
setlocale(LC_ALL, "Russian.1251")
setlocale(LC_ALL, "Russian_Russia.1251")
setlocale(LC_ALL, ".1251")
setlocale(LC_ALL, "Russian")
PM MAIL   Вверх
borisbn
Дата 1.4.2010, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



ИванМ, bag your pardon, прошлый пост писал дома (там builder не установлен). сейчас проверил - не работает setlocale, причём GetLastError возвращает ERROR_ENVVAR_NOT_FOUND (The system could not find the environment option that was entered). Может для builder'а нужно какие-то environment переменные завести ?
Код

#define __USELOCALES__
#include <stdio.h>
#include <locale>
#include <windows.h>
int main( int argc, char* argv[])
{
    char* strings[] = { "Russian.1251", "Russian_Russia.1251", ".1251", "Russian" };
    int lastError = 0;
    for ( int i = 0; i < 4; i++ )
    {
        std::setlocale( LC_ALL, strings[ i ] );
        lastError = GetLastError();
        if ( lastError )
        {
            printf( "%s - lastError = %d\n", strings[ i ], lastError );
        }
    }
    return 0;
}

выдаёт следующее:
Код

Russian.1251 - lastError = 203
Russian_Russia.1251 - lastError = 203
.1251 - lastError = 87
Russian - lastError = 87



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mrbrooks
Дата 1.4.2010, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Сам вопрос боянистей не куда. Вплоть до 2009 - Билдер относился как к setlocale, так и к более кошерному std::locale, сугубо отрицательно.
Хотя грешить только на Билдер не стоит - многие компиляторы без бубна так же оказываются так запросто выводить русский язык. Хотя в студии вопрос решается на ура.
PM MAIL   Вверх
DCamer
Дата 1.4.2010, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

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



--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
ИванМ
Дата 1.4.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В студии тоже не все ура. Ставишь локаль, он работает нормально на вывод и в консоль и в файл. Но если например ввести русское слово и его потом попытаться вывести, то опять будут крокозябры. Но, я думаю, тут дело скорее в самой винде. По другому никак.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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