Вы печати s[10]
в качестве символа (%c
), и числовое значение s[10]
является 0
, который представляет символ \0
, что означает конец строки, и не имеет текстовое представление. По этой причине вы ничего не видите.
Если вы хотите, чтобы увидеть числовое значение вместо значения символов, используйте %d
напечатать его в виде десятичной (целое) номер:
printf("%d\n", s[10]);
Обратите внимание, что конец строки не такой же, как конец строки, как сказано в одном из ваших комментариев. Конец строки означает, что любая операция строки над символьной последовательностью должна останавливаться при достижении первого \0
. Если последовательность символов имеет что-то еще после \0
, она не будет напечатана, потому что операция строки останавливается на первом знаке \0
.
Конец строки, однако, является нормальным символом, визуальный эффект которого заключается в том, что терминал или текстовый редактор печатает следующий символ после окончания строки в новой строке.
Если вы хотите иметь вектор полный конец строки символов (и напечатать их в качестве таковых), вы должны переместить вектор и заполнить его:
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = '\n';
printf("%c\n", s[10]);
В ASCII (числовое десятичное /) значение в конце строки (\n
) составляет 12, поэтому, следующий фрагмент кода будет эквивалентно:
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = 12;
printf("%c\n", s[10]);
это не работает, однако (не печатает новую строку):
char s[256] = {'\n'}; // or {12};
printf("%c\n", s[10]);
, потому что эффект {'\n'}
является назначение \n
к первому элементу массива, а Остатки, 255 символов не заполняются значением 0, независимо от того, какой тип массива вы делаете (char[]
, int[]
или любой другой). Если вы пишете пустую пару скобок {}
, все элементы будут равны 0.
Таким образом, эти два утверждения эквивалентны:
char s[256] = {}; // Implicit filling to 0.
char s[256] = {0}; // Implicit filling to 0 from the second element.
Однако без определения массива:
char s[256];
Массив не заполняется (не инициализирован), поэтому каждый элемент s
будет иметь что угодно, пока вы не заполните его значениями, например, с помощью for
.
Надеюсь, что на всех этих примерах вы получите всю картину.
Что вы ожидаете от печати? –
Он печатает буквальный ноль, и поэтому 'printf' считает, что это сделано, потому что это отмечает конец строки. – usr2564301
мой плохой, ошибаюсь :) @SouravGhosh –