strcat函數的坑點

咱們先看下面這樣一段代碼: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";

如今咱們再運行下看看結果:

這下果真正確了

相關文章
相關標籤/搜索