咱们先看下面这样一段代码:ios
1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 int main() 6 { 7 char *p1= "123"; 8 char *p2= "ABC"; 9 char str[50]= "xyz"; 10 strcat(p1,p2); 11 strcpy(str+2,p1); 12 cout<<str<<endl; 13 system("pause"); 14 return 0; 15 }
咋一看,这段代码的原意是将p2连接到p1的后面,p1为123ABC数组
而后将str字符数组向后移动两个位置,将p1拷贝到从该位置开始以后的内存中。函数
结果为xy123ABCspa
然而咱们运行一下这段代码发现程序崩溃了,咱们调用堆栈发现函数定位在这一行code
咦,这是怎么回事blog
赶忙再查查strcat函数的用法,发现当连接p1和p2字符串的时候,将连接的字符串一块儿内存
存入p1中,那么就隐含了这么个意思,就是说P1的大小必需要容得下连接后的字符串。字符串
可是本质上是字符串"123"是保存在程序中的常量区,而常量区只能进行读操做不能进行写io
操做class
那么咱们在栈区定义一个较大的数组来保存链接后的结果。
char p1[20]="123";
如今咱们再运行下看看结果:
这下果真正确了