Форум программистов, компьютерный форум CyberForum.ru

Непонятный вывод - C++

Восстановить пароль Регистрация
 
 
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 22:46     Непонятный вывод #1
У меня есть следующий код функции на С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CursorPosition(HWND hWnd, int xPosition, int yPosition, int xCell, int yCell, int sx, int sy) {
    int oneStepOnX = sx/8;
    int oneStepOnY = sy/8;
 
    TCHAR sumbolsChar[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
    TCHAR sumbolsInt[] = { '1', '2', '3', '4', '5', '6', '7', '8' };
 
    TCHAR intPos;
    TCHAR charPos;
 
    intPos = sumbolsInt[xPosition/oneStepOnX];
    charPos = sumbolsChar[yPosition/oneStepOnY];
 
    TCHAR out[2];
    out[0] = intPos;
    out[1] = charPos;
 
    MessageBox(hWnd, out , _T("Координаты"), MB_OK);
}
В окно сообщений выводит правильные координаты, и потом разные китайские иероглифы. В отладчике видно, что переменные intPos и charPos имеют правильные значения. Но после их занесения в массив out они смешиваются с каким-то мусором. Почему??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2011, 22:46     Непонятный вывод
Посмотрите здесь:

C++ Непонятный Код
C++ Непонятный вывод структуры через функцию
C++ Непонятный синтаксис.
Непонятный код? C++
Непонятный вывод значений синуса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mischanja
Всегда не хватает времени
 Аватар для Mischanja
117 / 117 / 7
Регистрация: 15.10.2009
Сообщений: 493
06.07.2011, 22:53     Непонятный вывод #2
C++
1
MessageBox(hWnd, out , _T("Координаты"), MB_OK);
попробуй на англ написать Координаты
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 22:58  [ТС]     Непонятный вывод #3
Он выводит в самом окне
Миниатюры
Непонятный вывод  
Bers
Заблокирован
06.07.2011, 22:58     Непонятный вывод #4
попробуйте сделать вот так:

Цитата Сообщение от zuq Посмотреть сообщение
TCHAR out[3];
out[0] = intPos;
out[1] = charPos;
out[3] = '\0';
Mischanja
Всегда не хватает времени
 Аватар для Mischanja
117 / 117 / 7
Регистрация: 15.10.2009
Сообщений: 493
06.07.2011, 22:59     Непонятный вывод #5
кинь проект
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:00  [ТС]     Непонятный вывод #6
Цитата Сообщение от Bers Посмотреть сообщение
попробуйте сделать вот так:
Тогда выводит два нужных символа, и один иероглиф
Bers
Заблокирован
06.07.2011, 23:02     Непонятный вывод #7
попробуйте тип char вместо TCHAR
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:03  [ТС]     Непонятный вывод #8
Пробовал - char нельзя засунуть в MessageBox()
Bers
Заблокирован
06.07.2011, 23:08     Непонятный вывод #9
Цитата Сообщение от zuq Посмотреть сообщение
робовал - char нельзя засунуть в MessageBox()
Ну я ж как то засовываю:

C++
1
2
3
4
5
6
char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, out , "Координаты", MB_OK);
выведет в окошке 12

Добавлено через 36 секунд
на что он ругается, если сделать char ?
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:14  [ТС]     Непонятный вывод #10
Если написать, так как вы предложили
C++
1
2
3
4
5
6
char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, out , "Координаты", MB_OK);
Код
1>d:\projects\test_win32\test_win32\test_win32.cpp(253): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "char [3]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
TCHAR out[3];
 out[0] = intPos;
 out[1] = charPos;
out[3] = '\0';
 
    MessageBox(hWnd, out , _T("Coordinates"), MB_OK);
}
С таким вариантом вскакивает окно сообщений и после нажатия ОК программа вылетает, ссылаясь на Run-Time Check Failure #2 - Stack around the variable 'out' was corrupted.
Bers
Заблокирован
06.07.2011, 23:17     Непонятный вывод #11
странно... вы в какой IDE пишите?

попробуйте вот так:

C++
1
2
3
4
5
6
   char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, &out[0] , "Координаты", MB_OK);
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:19  [ТС]     Непонятный вывод #12
Все те-же ошибки
Bers
Заблокирован
06.07.2011, 23:19     Непонятный вывод #13
все, я понял. Если вы в студии - нужно поставить в конфигурации флажок "использовать многобайтную кодировку"

И потом спокойно пишите:


C++
1
2
3
4
5
6
    char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, out , "Координаты", MB_OK);
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:21  [ТС]     Непонятный вывод #14
Да Все работает. Спасибо
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
06.07.2011, 23:23     Непонятный вывод #15
Цитата Сообщение от Bers Посмотреть сообщение
нужно поставить в конфигурации флажок "использовать многобайтную кодировку"
// ...
char out[3];
Bers, многобайтовая кодировка это wchar_t или ?
Bers
Заблокирован
07.07.2011, 00:08     Непонятный вывод #16
Цитата Сообщение от schdub Посмотреть сообщение
Bers, многобайтовая кодировка это wchar_t.
Совершенно по барабану.
Есть нормальный символьный тип данных - char. Есть поддержка многобайтовой кодировки от студии. Больше - ничо не нада. Все работает, как нужно.

Добавлено через 58 секунд
от чара требуется только две вещи:
1. Весить стабильно 1 байт.
2. Уметь хранить русские буквы (здесь IDE помогает).

Больше нафег ничо не нада.

Добавлено через 41 минуту
если кому то очень интересно разобраться с юникодом:

http://wm-help.net/books-online/prin.../59464-13.html
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.07.2011, 01:16     Непонятный вывод #17
C
1
MessageBoxA(NULL, out , "Координаты", MB_OK);
и можно ничего не менять...
Bers
Заблокирован
07.07.2011, 01:42     Непонятный вывод #18
Цитата Сообщение от easybudda Посмотреть сообщение
и можно ничего не менять...
Можно конечно заюзать TCHAR с егошними макросами. только нафег нужно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.07.2011, 02:46     Непонятный вывод #19
Цитата Сообщение от Bers Посмотреть сообщение
Можно конечно заюзать TCHAR с егошними макросами.
А чем ANSI версия MessageBox не устроила? Если в планах поддержка Unicode, так лучше её сразу делать, а так MessageBoxA() - самый незамороченный вариант.


 Комментарий модератора 
Bers, и кстати... Пишите по-русски!
Официальным языком форума является русский язык.
...
Избегайте грамматических ошибок при написании сообщений - уважайте себя и других участников форума.
...
Запрещено использовать нецензурные выражения в любом виде, оскорблять других участников форума, умышленно использовать выражения, противоречащие правилам русского языка.
Правила форума
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2011, 09:46     Непонятный вывод
Еще ссылки по теме:

C++ Непонятный вывод: постфиксные и префиксные инкремент/декремент
C++. Непонятный символ C++
Непонятный цикл C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
07.07.2011, 09:46     Непонятный вывод #20
Цитата Сообщение от easybudda Посмотреть сообщение
Bers, и кстати... Пишите по-русски!
А я что, по-английски пишу?
Что-то я вообще не понял комментарий модератора из 19 поста.
Yandex
Объявления
07.07.2011, 09:46     Непонятный вывод
Ответ Создать тему
Опции темы

Текущее время: 01:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru