Index out of bounds

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

2017-07-29  本文已影响0人  Dumbass

今天在日常造轮子的过程中(实现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函数,可以避免这个问题,具体的实现还没有做,但觉得应该不难。

上一篇下一篇

猜你喜欢

热点阅读