strcat()函数的不合理性

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;
}

strcat()函数的不合理性字符串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;
}
上一篇:单例模式--java代码实现


下一篇:strcat函数C语言实现