Страница 1 из 1

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

Добавлено: 16 июн 2004, 17:32
dimlevnik
Я хочу в консоли выводить из строковых переменных нормальные русские слова. А не чёрте чё.
Пытаюсь это делать так:

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

s - это строковая переменная, при компиляции естественно пишет ошибку.
Как можно нормально перевести из типа wchar_t в типы string, char* и наоборот?

Добавлено: 16 июн 2004, 18:04
DeeJayC
string - это класс. Для того, чтобы из него строку получить надо сказать

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

std :: string s = "aaa";
printf("%s\n", s.c_str() );
Ищите strcpy, итд итп.

Добавлено: 16 июн 2004, 18:16
dimlevnik
Так
а вот это самое "ааа", по русски или как.

я сейчас попробовал с русскими, в консоле появились "ррр"

Добавлено: 16 июн 2004, 18:27
dimlevnik
да, вот ещё:

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

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

возникает ошибка, говорит что не может конвертировать const char* в char*

Добавлено: 16 июн 2004, 19:30
dimlevnik
Скажите пожалуйста, в случае такого кода:

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);

должен ли текст "Привет всем" в консоле выводится по русски?

Добавлено: 16 июн 2004, 19:44
Romeo
Естестевенно ошибка. Надо писать:

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

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

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

char strBuf[100];
strncpy(strBuf, sentence.c_str(), 100);

Добавлено: 16 июн 2004, 19:55
dimlevnik
А как в консоле русские слова писать?

Добавлено: 17 июн 2004, 00:18
Andy
А как в консоле русские слова писать?
API OemToChar()/CharToOem()

Добавлено: 17 июн 2004, 09:19
Hawk
Лучше пользоваться API MultibyteToWideChar и наоборот. Там можно задать кодовую страницу чтобы точно быть уверенным какая конвертация будет произведена.

Добавлено: 18 июн 2004, 18:54
dimlevnik
1. спасибо за функции, я их попробовал

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

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