将两个字符串连接起来不能使用string.h任何字符

请问第9到第12是怎么理解,现在自学考试,专业是机电一体化 希望通过自学找到JavaScript相关工作
图片说明

 再进一步说,这个程序玩了好几个“诡计”,这些诡计,除了给阅读和理解程序增加困难,没有任何用处。
比如说for (i=0;i <2;i++)
这里,作者无非就是希望把相同的程序只写一遍,但是难道谭浩强之流不知道C语言有函数么?也许谭浩强知道,但是谭浩强这种野路子是搞basic起家的,那种没有函数的简陋的basic编程的经验已经根深蒂固在这种人脑海中。
所以他使用奇技淫巧而不是最佳的做法。
这里显然没有必要用循环来“节省代码”,最佳的做法是用函数:
void inputstr(char * p)
{
    while (true)
        {
            char c = getchar();
                if (c == '\n') break;
                p = c;
                p++;
        }
        p = '\0';
}
int mystrlen(char * p)
{
    int i = 0;
    while (*p != '\0')
            i++;
        return i;
}
void mystrcpy(char *des, char * str2)
{
    int n = mystrlen(des);
        int n1 = mystrlen(str2);
        for (int i = n; i < n + n1; i++)
        {
            des = str2;
                des++;
                str2++;
        }
        des = '\0';
}
主程序
int main()
{
    char str1[100];
        char str2[100];
        inputstr(str1);
        inputstr(str2);
        mystrcpy(str1, str2);
        printf("%s", str1);
}
(注意,以上程序没有考虑缓冲区越界检查!)

while那一句是说把输入的字符依次往str里放,直到输入的是回车结束。
下面的*(p[i]+(--k[i]))=0这句是说在字符串的结尾放一个0表示结束。

这程序应该是谭浩强之流的野路子写的,不值得你学习和模仿。
注意那个while循环,把所有的东西都挤在了一起,而且后面还有一个分号,这是一个实际上没有循环体的空循环。
谭浩强这种误人子弟的人最洋洋得意如何把代码写得高深,难以理解和简略,这在根本上违背了一个良好程序的价值观。
while ((*(p[i]+k[i]++)==getchar())!='\n'));
其实就是

 while (true)
{
    char c = getchar();
        if (c == '\n') break;
        p[i + k[i]] = c;
        k[i]++;
}