strcat函数的坑点

时间:2021-08-27 17:38:44

我们先看下面这样一段代码:

 #include <iostream>
#include <stdlib.h>
using namespace std; int main()
{
char *p1= "";
char *p2= "ABC";
char str[]= "xyz";
strcat(p1,p2);
strcpy(str+,p1);
cout<<str<<endl;
system("pause");
return ;
}

咋一看,这段代码的原意是将p2链接到p1的后面,p1为123ABC

然后将str字符数组向后移动两个位置,将p1拷贝到从该位置开始之后的内存中。

结果为xy123ABC

然而我们运行一下这段代码发现程序崩溃了,我们调用堆栈发现函数定位在这一行

strcat函数的坑点

咦,这是怎么回事

赶紧再查查strcat函数的用法,发现当链接p1和p2字符串的时候,将链接的字符串一起

存入p1中,那么就隐含了这么个意思,就是说P1的大小必须要容得下链接后的字符串。

但是本质上是字符串"123"是保存在程序中的常量区,而常量区只能进行读操作不能进行写

操作

那么我们在栈区定义一个较大的数组来保存连接后的结果。

char p1[]="";

现在我们再运行下看看结果:

strcat函数的坑点

这下果然正确了