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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
#1

Некорректный вывод текста - C++

06.07.2012, 05:37. Просмотров 477. Ответов 6
Метки нет (Все метки)

Здравствуйте! Есть такая функция:
C++
1
2
3
4
5
6
7
8
9
10
11
wchar_t* GetPlayerInfo()
{
    wchar_t buffer[64];
    .......
    int player_scores = GetScores(player);
    int player_level = GetLevel(player);
    int player_kills = GetKills(player);
    int player_deaths = GetDeaths(player);
    swprintf_s(buffer, L"Level: %d / Scores: %d / Kills: %d / Deaths: %d", player_level, player_scores, player_kills, player_deaths);
    return buffer;
}
Результат отрисовки текста (DX11, шрифт Arial):
 Комментарий модератора 
Создайте изображение, которое видно не только под микроскопом, и прикрепите его к сообщению (расширенный режим -> управление вложениями)

Когда просто вывожу текст с помощью MessageBoxW всё отлично...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
06.07.2012, 06:03     Некорректный вывод текста #2
как выводите ?

Так ?
C++
1
printf("%ws", buffer);
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
06.07.2012, 06:34  [ТС]     Некорректный вывод текста #3
Цитата Сообщение от MrCold Посмотреть сообщение
как выводите ?

Так ?
C++
1
printf("%ws", buffer);
Я рисую:
C++
1
DrawText(GetPlayerInfo(), 16, 0, 0, 0xff0099ff, 0);
P.S. Когда я в GetPlayerInfo возвращаю простой текст, например -
C++
1
return L"Test string";
, то он правильно рисуется (не иероглифами)
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
06.07.2012, 07:06     Некорректный вывод текста #4
Sheppard, предложу только заменить только все широкие символы
на обычный char, а больше и не знаю что делать , да еще ошибка возврат
локальной переменной, надо static сделать
вот так
C++
1
2
3
4
5
6
7
8
9
10
11
char* GetPlayerInfo()
{
   static char buffer[64];
 
    int player_scores = GetScores(player);
    int player_level = GetLevel(player);
    int player_kills = GetKills(player);
    int player_deaths = GetDeaths(player);
    sprintf_s(buffer, "Level: %d / Scores: %d / Kills: %d / Deaths: %d", player_level, player_scores, player_kills, player_deaths);
    return buffer;
}
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
06.07.2012, 07:26  [ТС]     Некорректный вывод текста #5
Цитата Сообщение от MrCold Посмотреть сообщение
Sheppard, предложу только заменить только все широкие символы
на обычный char, а больше и не знаю что делать , да еще ошибка возврат
локальной переменной, надо static сделать
вот так
C++
1
2
3
4
5
6
7
8
9
10
11
char* GetPlayerInfo()
{
   static char buffer[64];
 
    int player_scores = GetScores(player);
    int player_level = GetLevel(player);
    int player_kills = GetKills(player);
    int player_deaths = GetDeaths(player);
    sprintf_s(buffer, "Level: %d / Scores: %d / Kills: %d / Deaths: %d", player_level, player_scores, player_kills, player_deaths);
    return buffer;
}
Для рисования текста в DirectX 11 используется WCHAR
Case-Man
86 / 32 / 1
Регистрация: 02.01.2012
Сообщений: 320
06.07.2012, 09:05     Некорректный вывод текста #6
Цитата Сообщение от MrCold Посмотреть сообщение
еще ошибка возврат
локальной переменной
Вот тут корень всех проблем. Переменная на стеке затирается раньше, чем до нее доберется DX
Проще буфер снаружи в процедуру передавать.
Ну, или static, но это не самое красивое решение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2012, 16:16     Некорректный вывод текста
Еще ссылки по теме:

Некорректный вывод в файл C++
C++ Некорректный вывод кириллицы
Некорректный вывод текста C++
C++ Некорректный вывод программы
C++ Некорректный вывод символов

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

Или воспользуйтесь поиском по форуму:
Sheppard
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 48
06.07.2012, 16:16  [ТС]     Некорректный вывод текста #7
Спасибо большое, да вы права проблема была именно с буфером!
Yandex
Объявления
06.07.2012, 16:16     Некорректный вывод текста
Ответ Создать тему
Опции темы

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