码迷,mamicode.com
首页 > 其他好文 > 详细

strcat函数的坑点

时间:2015-08-30 22:58:15      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

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

 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拷贝到从该位置开始之后的内存中。

结果为xy123ABC

 

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

技术分享

 

咦,这是怎么回事

 

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

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

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

而改变

 

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

char p1[20]="123";

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

技术分享

这下果然正确了

 

strcat函数的坑点

标签:

原文地址:http://www.cnblogs.com/vpoet/p/4771656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!