strcat函数用法的一点看法
2016-07-17 20:20
363 查看
最近在刷题时碰到了strcat这个函数,一开始没怎么理解它的用法,出了错,现在写点自己的理解吧。 首先来看两个小程序
代码一: #include<iostream> using namespace std; int main() { char *s="abcd"; char *c="efgh"; strcat(s,c); cout<<s; return 0; } 代码二: int main() { char s[100]="abcd"; char *c="efgh"; strcat(s,c); cout<<s; return 0; }
自己先想想这两个代码有什么区别了,第一感觉是不是就是字符串c直接连接到了字符串s上呢,如果回答是的,那你也和我一样中枪了,答案是否定的,第一个是错的,第二个才是正确的。那么问题来了,第一个到底错在哪里呢,1="abcdefg"; p1="abcdefg";
//p1是一个指向字符串的指针,实际上编译器是这样做的:根据你初始化此指针时给出的值(此例中就是abcdefg)生成一个字符串,然后把这个字符串的第一个字符的地址拿出来,让p1指向它,这样就OK了。你如果想再改动这个字符串,对不起,不可以,因为它已经是定长的了,无法再改动。
char p2[10]=”abcdefg”;
//p2是一个字符数组的名称,其实也就是一个指向字符的常量指针,它指向的地址最多可以容纳10个字符。
而 strcat 函数的原型如下:
extern char *strcat(char *dest,char *src);
//strcat函数会将src所指向的内存空间中的字符连接到dest所指向的内存空间后面,这就要求dest所指向的空间足够大,能够容纳的下src,但前提是dest是可以被修改的char *s=”abcd”;这样初始化的话,相当于s是常量指针,其指向的内容不能被修改,但是自身可以变,s+1等都是合法的,指针变量本身和指针变量指向的数据不是一回事。
关注微信公众号:编程美学,每周学点编程知识,让自己从技术小白变为技术大牛
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储
- C语言中计算正弦的相关函数总结