Как уже отмечали другие, написанная программа имеет неопределенное поведение.
Если вы сделаете небольшое изменение:
char x[] = "girl";
тогда я считаю, что это законно и возможно объяснить. (РЕДАКТИРОВАТЬ: На самом деле есть еще проблемы с ним. Это int main()
, и вы должны return 0;
в конце. Вам также нужно #include <string.h>
, потому что вы используете strlen
, и #include <stdio.h>
, потому что вы используете printf
.)
Линия
*x = x[n];
устанавливает x[0]
(то есть *x
) в x[4]
(что является символом окончания строки '\0'
). Таким образом, первая строка для печати является пустой строкой, потому что самый первый символ - это терминатор строки.
Затем мы перебираем строку, по одному символу за раз, печатая подстроки:
irl
rl
l