C语言学习笔记---字符串拼接函数 strcat() 和 strncat()
strcat()函数
strcat()函数主要用来拼接字符串,用于将一个字符串拼接到另一个字符串的后面。下面通过一个简单的例子来演示一下这个函数的使用方法。
int main()
{char str1[10]="123";char str2[4]="abc";printf("str1:%s\r\n",str1);printf("str2:%s\r\n",str2);strcat(str1,str2);printf("str1:%s\r\n",str1);printf("str2:%s\r\n",str2);system("pause");return 0;
}
定义了两个字符串str1和str2,首先将两个字符串打印出来,接着使用strcat()函数将str2字符串拼接到字符串str1的后面,最后再将两个字符串打印一遍。输出结果如下:
通过输出的结果可以看到字符串2的确已经被拼接到了字符串1的后面。
但是使用这个函数的时候要注意一点,这个函数默认是不检测字符串1的长度的,如果字符串1的长度不能够容纳下字符串2,就可能会导致字符溢出。比如在这里给字符串1追加一个比较长的字符串2。
当程序运行完成之后,软件出现了错误。这就说明在使用strcat()函数向str1字符串追加内容的时候,由于str1空间比较小,而追加的字符又很多,就会导致多出来的字符溢出到相邻的存储空间中,导致软件运行奔溃。
strncat()函数
为了解决正问题,系统又提供了一个新的字符串追加函数strncat()。这个函数相比strcat()函数多了一个参数,第三个参数用于设置追加内容的长度。这样在追加字符串的时候,就可以控制追加的字符长度,不会出现溢出的情况。
int main()
{char str1[10]="123";char str2[]="abcdefghjhijkl";int cnt = 0,cnt1 = 0,cnt2 = 0;printf("str1:%s\r\n",str1);printf("str2:%s\r\n",str2);cnt = strlen(str1);cnt1 = sizeof(str1) / sizeof(str1[0]);cnt2 = cnt1 - cnt;printf("%d,%d,%d\r\n",cnt,cnt1,cnt2-1);strncat(str1,str2,cnt2);printf("str1:%s\r\n",str1);printf("str2:%s\r\n",str2);system("pause");return 0;
}
首先打印原始的字符串1和字符串2内容,接下来使用strlen()函数计算出字符串1实际占用的大小,使用sizeof()函数计算出字符串的总空间大小,然后计算这两个数据的差,就是字符串1中的剩余空间。当使用strncat()函数拼接字符串的时候,最后一个参数就是字符串1中的剩余空间大小。这样在拼接字符串的时候,就不会导致数据溢出了。
通过打印的结果可以看出,拼接后的字符串1,最后拼接的字符只是截取了字符串2的一部分,并没有将字符串2的内容全部拼接进去。拼接的字符串长度为6。计算出来字符串剩余长度为7,但是这里面也把字符串最后一位为空字符’\0’,计算进去了。所以在使用strncat()函数时,最后一个参数的长度要减1,给字符串1留一个空白字符的位置。
C语言学习笔记---字符串拼接函数 strcat() 和 strncat()相关推荐
- C语言学习笔记---字符串查找函数strstr()和strpbrk()函数
strstr()函数 C语言中如何向查找一个字符串中是否包含另一个字符串,可以使用strstr()函数.使用示例如下: int main(int argc, char *argv[]) {char ...
- C语言学习笔记---字符串转换函数
字符串转整数 字符串转换为整数的函数有两个,他们的函数原型如下: int __cdecl atoi(const char *_Str);long __cdecl atol(const char * ...
- C语言学习笔记---字符串对比函数strspn()和strcspn()函数
strspn()函数 如果要对比两个字符串中从第一个字符开始总共有多少个相同字符时,可以使用strspn()函数,它里面有两个参数字符串1和字符串2,从字符串1开始位置依次对比字符串1和字符串2有 ...
- C语言_字符串拼接函数strcat使用及实现
字符串拼接函数strcat 01--字符串拼接函数strcat函数原型 char* strcat(char *dest, const char *src); 作用:把src所指向的字符串(包括&quo ...
- c语言中void arrout,c语言学习笔记(数组、函数
<c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...
- 不使用函数实现字符串拼接函数strcat
不使用函数实现字符串拼接函数strcat,已知函数原型为 char *strcat(char *dest,const char src); 不使用系统库函数,实现strcat #include< ...
- C学习笔记-字符串处理函数
字符串函数是最问常用的库函数之一,本文整理了常用的字符串函数,其来源为互联网 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, ...
- LoadRunner字符串拼接函数strcat
char*strcat(char*to,constchar*from);/将一字符串追加到另一字符串后面 示例: lr_save_datetime("Today is %m月 %d日 ...
- c语言学习笔记之分段函数
内容来自哔哩哔哩视频 [浙江大学]C语言入门与进阶 翁恺 学习笔记 分段函数 if ( x < 0 ) { f = -1; } else if ( x == 0 ) { f = 0; } els ...
最新文章
- python面试-10个Python面试常问的问题(小结)
- mysql 替换 多个逗号_如何使用mySQL replace()替换多个记录中的字符串?
- 072_Math对象
- PHP Mysql类【转】
- GDCM:DICOM文件转储飞利浦ECHO的测试程序
- 对《生产流水线模式》讨论的总结性回复
- switch一定比if else好用吗
- Ubuntu下Apache+php+mysql网站架设详解
- OGG工作原理(Oracle Golden Gate)
- Android应用模块之间通信模式
- 学习J2ME需要掌握的七种技术
- 计算机键盘正确指法,计算机盲打键盘指法图顺口溜
- 在Matlab安装Vlfeat
- 日志收集 Graylog
- matlab列联表的独立性检验,(8.4列联表独立性分析案例.ppt
- java脚手架_Java代码重构
- ubuntu20.04安装百度网盘
- 简单了解计算机编码知识-(中文编码)
- Linux的du 和 df 的区别
- 怎么选择.net培训机构
热门文章
- 发现了 四川方言版的让子弹飞 的种子
- 实例3 输出由“*”组成的三角形
- 设计模式之享元(flyweight)模式
- 位带操作全解释,个人觉得不错就转过来理解下
- 201521123061 《Java程序设计》第六周学习总结
- Lucene学习之四:Lucene的索引文件格式(3)
- [数据库]oracle导出数据库
- 两个女的:“你好,我想问一下......我们饿了,能不能买......”
- Java 面试高频提问知识点一
- 反射--获取当前子类父类的泛型类型