Недавно я видел код, в котором сортировалась строка, и \0
(так как он имеет наименьший код ASCII) пришел первым из строки.
Но с использованием спецификатора формата %c
истинное значение отсортированная строка была напечатана, но я проверил с помощью %s
и ничего не было напечатано.
Так вот мой вопрос, если я добавлю \0
в строку (в то время как у меня есть допустимое значение в моей строке после терминатора ), могу ли я получить к этим значениям что-то вроде %c
, это безопасно? И будет ли этот ответ всегда или он просто отвечал из-за UB?
Вот пример:
int main()
{
char a[8]="abcdefg";
char b[8];
for (int i = 0; i < 8; i++)
{
b[7-i] = a[i];
}
for (int i = 0; i < 8; i++)
printf("%c ", b[i]);
printf("%s", b);
}
В приведенном выше примере printf("%c ", b[i]);
печатает строку отверстия, даже после \0
.
Во втором printf("%s", b);
ничего не печатается?
На самом деле я хочу знать, является ли использование первого printf
верным и законным?