strcat()函数的不合理性
先展示代码与效果图
int main(void)
{
char p1[5], p2[100];
memset(p1, 0, strlen(p1)*sizeof(char));
gets(p1);
gets(p2);
strcat(p1, p2);
printf("%s\n", p1);
printf("%d\n", sizeof(p1));
for (int i = 0; p1[i] != '\0'; i++)
printf("%c", p1[i]);
system("pause");
return 0;
}
字符串p1的长度已经改变了。我们可以很直观的看到,如果这个没改变,那么p1已经是数据溢出了。
这个是有问题的。
我们有必要会写出这些函数的实现
下面是我自己写的代码
char *catchar(char * ptr1, char *ptr2)
{//此方法相当与要自己写strcat()函数
//原方法没有返回值,是将ptr2接在ptr1里,容易造成数据溢出
char *str,*p;
int len = strlen(ptr1) + strlen(ptr2) + 1;
str = (char *)malloc(len*sizeof(char));
memset(str, 0, len*sizeof(char));//将这块区域的值全部置为零
p = str;
int i, j;
i = j = 0;
for (; (*(p + i) = *(ptr1 + i)) != '\0'; i++);
for ( i = i - 1; (*(p + i) = *(ptr2 + j) )!= '\0'; j++, i++);
return str;
}
int main()
{
char p1[50], p2[50];
gets(p1);
gets(p2);
char *p = NULL;
p = catchar(p1, p2);
printf("%s\n", p);
free(p);//释放空间
system("pause");
return 0;
}