strcat()函数主要用来拼接字符串,用于将一个字符串拼接到另一个字符串的后面。下面通过一个简单的例子来演示一下这个函数的使用方法。
int main()
{
char str1[10]="123";
char str2[4]="abc";
printf("str1:%s\r\n",str1);
printf("str2:%s\r\n",str2);
strcat(str1,str2);
printf("str1:%s\r\n",str1);
printf("str2:%s\r\n",str2);
system("pause");
return 0;
}
定义了两个字符串str1和str2,首先将两个字符串打印出来,接着使用strcat()函数将str2字符串拼接到字符串str1的后面,最后再将两个字符串打印一遍。输出结果如下:
通过输出的结果可以看到字符串2的确已经被拼接到了字符串1的后面。
但是使用这个函数的时候要注意一点,这个函数默认是不检测字符串1的长度的,如果字符串1的长度不能够容纳下字符串2,就可能会导致字符溢出。比如在这里给字符串1追加一个比较长的字符串2。
当程序运行完成之后,软件出现了错误。这就说明在使用strcat()函数向str1字符串追加内容的时候,由于str1空间比较小,而追加的字符又很多,就会导致多出来的字符溢出到相邻的存储空间中,导致软件运行奔溃。
为了解决正问题,系统又提供了一个新的字符串追加函数strncat()。这个函数相比strcat()函数多了一个参数,第三个参数用于设置追加内容的长度。这样在追加字符串的时候,就可以控制追加的字符长度,不会出现溢出的情况。
int main()
{
char str1[10]="123";
char str2[]="abcdefghjhijkl";
int cnt = 0,cnt1 = 0,cnt2 = 0;
printf("str1:%s\r\n",str1);
printf("str2:%s\r\n",str2);
cnt = strlen(str1);
cnt1 = sizeof(str1) / sizeof(str1[0]);
cnt2 = cnt1 - cnt;
printf("%d,%d,%d\r\n",cnt,cnt1,cnt2-1);
strncat(str1,str2,cnt2);
printf("str1:%s\r\n",str1);
printf("str2:%s\r\n",str2);
system("pause");
return 0;
}
首先打印原始的字符串1和字符串2内容,接下来使用strlen()函数计算出字符串1实际占用的大小,使用sizeof()函数计算出字符串的总空间大小,然后计算这两个数据的差,就是字符串1中的剩余空间。当使用strncat()函数拼接字符串的时候,最后一个参数就是字符串1中的剩余空间大小。这样在拼接字符串的时候,就不会导致数据溢出了。
通过打印的结果可以看出,拼接后的字符串1,最后拼接的字符只是截取了字符串2的一部分,并没有将字符串2的内容全部拼接进去。拼接的字符串长度为6。计算出来字符串剩余长度为7,但是这里面也把字符串最后一位为空字符’\0’,计算进去了。所以在使用strncat()函数时,最后一个参数的长度要减1,给字符串1留一个空白字符的位置。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_20222919/article/details/121038138
内容来源于网络,如有侵权,请联系作者删除!