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