美文网首页Index out of bounds
实现strcat()时遇到的问题和反思

实现strcat()时遇到的问题和反思

作者: Dumbass | 来源:发表于2017-07-29 01:42 被阅读0次

    今天在日常造轮子的过程中(实现strcat函数),遇到了个问题,程序又吐核了
    不多废话,贴一下我的实现:

    int i_strlen(const char *input);
    char* i_strcat(char *input1,const char *input2);
    int i_strlen(const char *input)
    {
      char cache;
      int i;
      i = 0;
      while((cache = *(input+i)) != '\0')
      {
        ++i;
      }
      return i;
    }
    char* i_strcat(char *input1,const char *input2)
    {
      int l1,l2;
      l1 = i_strlen(input1);
      l2 = i_strlen(input2);
      for(int i = l1;i<=(l1 + l2);++i)
      {
        if (i == l1+l2)
        {
          *(input1 + i) = '\0';
          continue;
        }
        *(input1 + i) = *(input2 + i - l1);
      }
      return input1;
    }
    

    实际上这个实现应该是没有任何的问题的,那程序为什么吐核了呢?来看看我是怎么调用它的:

    char *input1 = "Fuck ";
    char *input2 = "you.\n";
    i_strcat(input1,input2);
    

    聪明的你一定已经看出问题了,原因在于input1是一个定长数组,当你尝试着把input2的数据追加到input1里时,会写入到未被分配的空间里,覆盖程序原有数据,导致程序崩溃。
    总结一下:
    还是要时刻注意数组越界问题,另外可以考虑实现一个增强版的strcat函数,可以避免这个问题,具体的实现还没有做,但觉得应该不难。

    相关文章

      网友评论

        本文标题:实现strcat()时遇到的问题和反思

        本文链接:https://www.haomeiwen.com/subject/isrqlxtx.html