Вывод: «Привет» Почему вывод не "Hello World"? **
#include <stdio.h> int main () { char x[] = "Hello", y[]="World", xy[50]; int i, j; for(i=0; x[i] != '\0'; i++) { xy[i] = x[i]; } i++; xy[i] = ' '; for(j=0; y[j] != '\0'; j++) { i++; xy[i] = y[j]; } printf("%s", xy); return 0; }
Одна проблема прямо здесь:
i++; xy[i] = ' ';
Вы пропускаете один символ xy, оставляя его неинициализированным.
xy
Чтобы исправить, удалите i++:
i++
xy[i] = ' ';
Другая проблема заключается в том, что вы не добавляете символ NUL в самом конце.
Это потому, что вы увеличиваете i перед установкой xy[i] = ' '. Это оставляет xy[i] установленным на потенциально неправильное значение. Вместо этого используйте xy[i++] = ' '; и, в общем, обратите внимание на порядок ваших приращений: в вашей программе есть больше мест, где вы ошиблись:)
i
xy[i] = ' '
xy[i]
xy[i++] = ' ';
Вы пробовали пошагово пройти по коду? Если нет, попробуйте. Вы поймете, что оставили случайный символ в xy, когда сделали
i++; //line 10
в строке 10. В хорошие дни это будет нулевой символ. Так что вы просто видите ноль. В плохие дни это может быть любой странный символ, так что вы можете даже получить Hello! World