2014-09-22 1 views
-1

Я новичок в программировании Windows, и какой опыт у меня был на сегодняшний день с C#.Почему я вижу вопросительные знаки в окне отладки (строка)?

Меня попросили работать над проектом, написанным коллегой на C++. Он избегает использования какой-либо функциональности .Net, так как ему это не нравится. Я пытаюсь добавить в какой-то выход отладки, вот мой код:

std::ostringstream strs; 
    strs << "Average value: " << dbl_sum/(double)_buffer.size() << " Buffer Size: " << _buffer.size(); 
    std::string str = strs.str(); 
    OutputDebugString((LPCTSTR)str.c_str()); 

Однако, когда я запускаю программу, которую я вижу такие строки в окне отладки:

?????????????????????????????›? 

Мои лучше всего предположить, что это как-то связано с моим преобразованием в LPCTSTR, но я получил этот метод от ответа на старый вопрос здесь.

+1

Этот факт только остановил компилятор, чтобы сообщить вам, что вы делаете это неправильно. Это не помешало вам сделать это неправильно. Используйте OutputDebugStringA() для вызова машины времени. –

+0

Спасибо, используя OutputDebugStringA устранил проблему – James

ответ

0

Благодаря @Hans Passant мне удалось решить эту проблему. Я изменил свой код на:

std::ostringstream strs; 
strs << "Average value: " << dbl_sum/(double)_buffer.size() << " Buffer Size: " << _buffer.size() << std::endl; 
std::string str = strs.str(); 
OutputDebugStringA((LPCSTR)str.c_str()); 
0

I Guess голец набор вашего проекта является UNICODE

, когда вы берете ASCII строку и преобразовать его в UNICODE вы получили Джиббериш.

Чтобы решить эту проблему вам нужно использовать широкие строковые типы вместо строки или изменить программу кодового в Многобайтовыестроки Вам нужно изменить эти типы: string к wstring, ostringstream к wostringstream, "abc" к L"abc"

std::wostringstream strs; 
strs << L"Average value: " << dbl_sum/(double)_buffer.size() << L" Buffer Size: " << _buffer.size(); 
    std::wstring str = strs.str(); 
    OutputDebugString(str.c_str()); 
Смежные вопросы