как использовать wprintf со строковыми переменными?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

Я хочу в консоли выводить из строковых переменных нормальные русские слова. А не чёрте чё.
Пытаюсь это делать так:

setlocale(LC_ALL, ".866");
wprintf(s);

s - это строковая переменная, при компиляции естественно пишет ошибку.
Как можно нормально перевести из типа wchar_t в типы string, char* и наоборот?
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

string - это класс. Для того, чтобы из него строку получить надо сказать

Код: Выделить всё

std :: string s = "aaa";
printf("%s\n", s.c_str() );
Ищите strcpy, итд итп.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

Так
а вот это самое "ааа", по русски или как.

я сейчас попробовал с русскими, в консоле появились "ррр"
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

да, вот ещё:

пытаюсь провести такое присвоение:

string sentence;
char *ss =sentence.c_str();

возникает ошибка, говорит что не может конвертировать const char* в char*
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

Скажите пожалуйста, в случае такого кода:

string sentence("Привет всем");
const char *ss =sentence.c_str();
size_t size = strlen (ss) + 1;
wchar_t *buf =(wchar_t *) malloc (size * sizeof (wchar_t));
size = mbstowcs (buf, ss, size);
wprintf(L"%s \n",buf);

должен ли текст "Привет всем" в консоле выводится по русски?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Естестевенно ошибка. Надо писать:

Код: Выделить всё

const char *ss =sentence.c_str(); 
а если строка должна модифицироваться, то нужно воспользоваться буфером:

Код: Выделить всё

char strBuf[100];
strncpy(strBuf, sentence.c_str(), 100);
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

А как в консоле русские слова писать?
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

А как в консоле русские слова писать?
API OemToChar()/CharToOem()
*provided AS IS
Hawk
Сообщения: 216
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

Лучше пользоваться API MultibyteToWideChar и наоборот. Там можно задать кодовую страницу чтобы точно быть уверенным какая конвертация будет произведена.
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

1. спасибо за функции, я их попробовал

2. ещё попробовал перевод с помощью смещения кода буквы

как вы думаете что лучше?
Ответить