strcat函数的坑点
来源:互联网 发布:mac mysql 安装 编辑:程序博客网 时间:2024/05/17 01:38
我们先看下面这样一段代码:
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";
现在我们再运行下看看结果:
这下果然正确了
0 0
- strcat函数的坑点
- strcat(),strcpy()函数的注意点
- strcat函数的使用
- strcat()函数的实现
- strcat函数的实现
- strcat 函数的实现
- strcat函数的实现
- strcat函数的用法
- strcat函数的使用
- strcat函数越界的问题
- strcat函数的另一种代码
- 对strcat函数的理解
- 实现strcat的功能【不可以使用strcat函数】
- strcat函数
- strcat() 函数
- strcat函数
- strcat函数
- strcat函数
- 剑指offer-面试题29.数组中出现次数超过一半的数字
- 剑指offer-面试题30.最小的k个数
- SGU171
- html5+css(2)
- SQL 基础--> 子查询
- strcat函数的坑点
- MyBatis (6)——调用存储过程
- js五子棋(带AI)
- C与C++中的const
- Push local non-git project to remote github repo
- 2013 语言包无法运行解决方法
- 进程与线程的一个简单解释
- sql各种查询技巧
- 常见面试题整理+网易实习生面试