Код, показанный ниже, предназначен для того, чтобы вначале манипулировать содержимым строки p, а затем распечатать его содержимое. Я проверил код, используя два цикла while и инструкцию printf.Инициализированная строка в c дает странный вывод
#include <stdio.h>
#include <string.h>
int main(void) {
char p[10] = "Hello";
char *a = p;
while(*a++)
;
*a++ = '1';
*a++ = '\0';
a = p;
int i;
for(i = 0; i < 10; i++)
putchar(a[i]);
putchar('\n');
for(i = 0; i < 10; i++)
putchar(p[i]);
putchar('\n');
printf("%s\n", p);
return 0;
}
Выход:
[email protected]:~$ gcc -o test test.c
[email protected]:~$ ./test
Hello1
Hello1
Hello
Теперь у меня есть два вопроса, на мой взгляд, первый, Где все значения для мусора в первых двух строках, которые будут показаны после печати этих 7 символов (включая NULL) , Во-вторых, почему вывод инструкции printf равен «Hello», а должен быть «Hello1»?
нет, это совершенно неправильно ** ** Вы явно не поняли, что код должен делать. Если вы удалите точку с запятой после 'while', она заполнит всю строку символом' '1''. Это не то, чего хочет OP. –
@ user3477950 На каком основании вы заключаете ** какой вид мусора ** нужен OP? – SomeWittyUsername
Речь идет не о мусоре. Ваш ответ не отвечает первой части, он отвечает на вторую часть. (Кстати, по моему заключению: опыт. Я видел * много * людей, задающих вопросы, идентичные этому, и они всегда, недвусмысленно, без исключения, ищут «мусор» из-за отсутствия инициализации, что является миф.) –