Вопрос по c++, winapi, visual-studio-2010 – Почему в окне сообщения C ++ отображается китайское сообщение [дубликаты]

1

Possible Duplicate:
Why does my simple C++ GUI application show a message box in Chinese?

Я реализовал этот блок кода, как показано ниже в Visual C ++:

int nResult=MessageBox(NULL,
                       (LPCWSTR)"An example of Cancel,Retry,Continue",
                       (LPCWSTR)"Message Box!",
                        MB_ICONWARNING|MB_ABORTRETRYIGNORE);

однако, что бы я ни пытался, он всегда показывает окно сообщения на китайском! Поэтому я просто хочу попросить любое решение для моей проблемы и почему здесь есть китайское сообщение. Спасибо вам!

Боже мой, опять этот тривиальный вопрос. :-) Xearinox
Я тоже получил китайский! Почему мы все становимся китайцами? Неужели так много китайских символов, что когда-нибудь строка указывает на какое-то случайное место в памяти, что может превзойти китайцев? CodyBugstein

Ваш Ответ

3   ответа
10

образом:

int nResult=MessageBox(NULL,
                   L"An example of Cancel,Retry,Continue",
                   L"Message Box!",
                   MB_ICONWARNING|MB_ABORTRETRYIGNORE);

В C ++ строковые литералы Юникода имеют префиксL, Если вы не указали префикс, приведение к «строковой константе Юникода»; не поможет и приведет к неправильной интерпретации местоположения памяти.

Error: User Rate Limit Exceeded(LPCWSTR)Error: User Rate Limit ExceededisError: User Rate Limit ExceededLError: User Rate Limit ExceededinterpretError: User Rate Limit ExceededhereError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded(Type) thingToBeCastedError: User Rate Limit ExceededLError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

ение, на которое указывает. Это не то, что делают приведения C ++. Они просто сообщают компилятору, что указатель указывает на новый тип. Чтобы указатьширокий буквальныйиспользоватьL перед цитатами (илиновые строковые литералы если ваш компилятор их поддерживает). И избавиться от актерского состава, это просто заслоняет ошибку.

4

вы ввели строку ASCII в строку UNICODE. Вместо этого используйте макрос _TEXT (& quot; Ваша строка & quot;).

Вы не можете просто интерпретировать байты ASCII как строку UNICODE, иначе произойдет что-то плохое.

Редактировать: Также, если вы хотите строки ASCII, вы можете явно вызвать MessageBoxA () или изменить настройки многобайтовых символов в настройках вашего проекта.

Error: User Rate Limit Exceeded

Похожие вопросы