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

在这里插入图片描述字符串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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值