C语言菜鸟请教关于一维数组简单问题

大家好,可以向你求助关于C语言的疑惑吗?小生自学C语言,很多东西无法理解,如果大牛愿意抽空为我解惑,在下感激不尽!
这是一个合并两含空格字符串的程序:
#include
#include
int main(){
char strA[20],strB[20];
int i,j,n=0;
printf("input strA: \n");
gets(strA);
printf("input strB: \n");
gets(strB);
for(i=0;i<strlen(strA);i++){
if(strA[i]==' '){
n++;
① for(j=i;j<strlen(strA);j++)
② strA[j]=strA[j+1];
}
}
for(i=0;i<strlen(strB);i++){
if(strB[i]==' '){
n++;
for(j=i;j<strlen(strB);j++)
strB[j]=strB[j+1];
}
}
strcat(strA,strB);
for(i=0;i<n;i++)
③ printf(" ");
for(i=0;i<strlen(strA);i++)
④ printf("%c",strA[i]);
return 0;
}
我的疑惑是:第①②是什么意思?第③④中,为什么他直接能够把空格、字符给输出来?

1.2是找到空格候,通过移位数组,将空格覆盖,同时记空格数,
3.4是打印空格数,并打印去空格后的数组

1、2的意思是如果字符数组A里有空格就会进行for循环将空格后的字符往前提一位(相当于就是把空格删除了)
3的意思就是对字符数组A,B进行遍历搜索,有多少个字符就输出多少空格
4的意思就是因为%c就是一个字符运算符,就是吧字符数组A里的所有字符逐个输出

1.2是读入键盘字符。双引号把空格当字符输出。

1.2找到空格,移位数组,然后覆盖空格顺便计数空格数量
3.4打印空格数量,打印取出空格手的数组