weixin_30947631
孤独的投机家
2015-09-03 06:54
采纳率: 100%
浏览 2.6k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • caozhy
    已采纳
     再进一步说,这个程序玩了好几个“诡计”,这些诡计,除了给阅读和理解程序增加困难,没有任何用处。
    比如说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);
    }
    (注意,以上程序没有考虑缓冲区越界检查!)
    
    点赞 评论
  • a1193561652
    纵横车 2015-09-03 07:09

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

    点赞 评论
  • caozhy

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

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

相关推荐