2013-09-17 3 views
1

У меня есть этот код в моей программе, но он не печатает числа, но если бы я должен был переключить «i» в «(char) i) на любой нормальный символ, a ', то он будет печатать на консоли.печать символов и ints

Почему эта печать не отображается на моей консоли?

char debugStr[1000]; 
for(int i = 0; i < 1000; i++) 
    { 
     debugStr[i] = ((char)i); 
    } 
OutputDebugStringA(debugStr); 

ниже отпечатков успешно линия 1000 "а":

char debugStr[1000]; 
    for(int i = 0; i < 1000; i++) 
     { 
      debugStr[i] = ((char)'a'); 
     } 
    OutputDebugStringA(debugStr); 
+3

«int» не вписывается в 'char' ... –

+1

И в любом случае ваш код не определен, поскольку вы полностью заполняете буфер данными, не оставляя места для завершающего NUL, который требует' OutputDebugStringA' , –

+0

Не совсем уверен, чего вы хотите, вы хотите сохранить значение символа числа? Или буквально «1», «2», «3»? – ngneema

ответ

7

Самый первый символ имеет нулевое значение.

Предположительно, OutputDebugStringA интерпретирует свой аргумент как строку C-стиля: последовательность символов с нулевым символом. Поэтому он будет печатать символы до тех пор, пока не найдет нуль; в этом случае это произойдет немедленно, так что ничего не выйдет.

Второй пример дает неопределенное поведение: он будет стекать с конца массива и продолжать движение до тех пор, пока он не найдет нулевое значение байта или не достигнет нечитаемой ячейки памяти и сработает.

3

В C, строки нулем. Поскольку вы устанавливаете первый символ равным 0, строка считается пустой.

23 (число) - это нечто совсем иное, чем "23" (строка).

1

Возможно, с тех пор, как вы начинаете с 0, вы не получаете выход. Я бы держать его между 32 < = и < = 127

см ASCii таблицу: http://www.asciitable.com/

0

Две вещи, внутр я начинается с 0, что нулевой байт. который, скорее всего, будет завершающим символом для функции печати. Если я начинаю с нуля и все еще не печатаю, тогда вам, возможно, придется рассмотреть утверждение. В litte-endian int читается справа налево, тогда как символы читаются слева направо, поэтому преобразование «может» относится только к самому крайнему байту int.

Смежные вопросы