Избавление от "крякозябр".

Еслис помощью объекта cout вывести на монитор кириллицу, то получим "крякозябры".

Чтоб избавиться от них надо для вывода применит функцию CharToOem(). Причем напрямую так её не применишь, она какая-то задроченная. Вот её описание:

Функция CharToOem преобразует строку в OEM представление набора символов.

Синтаксис:

BOOL CharToOem(      

    LPCTSTR lpszSrc,
    LPSTR lpszDst
);

Смотрим внимательно. Во-первых функция возвращает тип BOOL - это виндовозный тип, аналог bool в C++. Т.е. может принимать значения истина или ложь.

Далее имеем два параметра:

lpszSrc
[входной] Указатель на признак окончания строки для преобразования. Имеет тип LPCTSTR - это также виндовозный тип с суффиксом LP, что такое CT - не знаю (наверно char type). При этом если используется юникод, то LPCTSTR заменяется на тип  LPCWSTR, в противном случае на тип  LPCSTR - а это уже виндовозный указатель на признак окончания строки для кодировки ANSI.
lpszDst

 [выходной] Указатель на буфер для преобразуемой строки. Короче функция на входе получает строку в ANSI раскладке, преобразует её в OEM - кодировку и помещает во второй параметр.

Тип у второго параметра LPSTR, чем он отличается от типа LPCSTR бог его и знает.

Вот то что главное: LPCSTR и LPCTSTR и LPSTR это тип данных Виндоуза - аналог типу char в C++.  LPCWTR -  это расширенный набор символов - char_w.

Это ж надо простейшее дело так замутить.

1 - вариант:

#include <iostream>

#include <windows.h>// для функции CharToOem()

using namespace std;

char* rus(const char* text);//прототип функции. Можно и без прототипа,

//если определение функции поставить до её вызова.

void main()

{

//вызывающая функция rus().

    cout << rus("Привет пламенный") << "\n" ;

}

char buf[256];//буфер куда передается текст.

char* rus(const char* text) //заголовок функции.

{

    CharToOemA(text,buf);

    return buf;

}

2 - й вариант:

void main()

{setlocale(LC_ALL,"rus");

........................................

........................................

}

Далее    Назад    Главная