strcat函数使用中出现的问题
strcat函数:
原型:extern char *strcat(char *strDest, char *strSrc);
功能:把strSrc所指字符串添加到strDest结尾处(覆盖strDest结尾处的'\0')并添加'\0';
说明:strSrc和strDest所指内存区域不可以重叠且strDest必须有足够的空间来容纳strSrc的字符串。
返回指向strDest的指针。
1 char *strcat(char *strDest, const char *strSrc) 2 { 3 char *address = strDest; 4 assert((strDest != NULL)&&(strSrc != NULL)); 对源地址和目的地址合法断言。 5 while (*strDest != '\0') //如果使用while (*strDest++),当strDest为空时,但此时strDest指向 空地址 的下一个地址。 6 { 7 strDest++; 8 } 9 while ((*strDest++ = *strSrc++) != '\0')10 {11 ;12 }13 return address;14 }
大多数C语言里面的字符串都是 一个是字符数组参数,一个是字符指针参数。否则会发生错误
例如:
1 int main(void)2 {3 char *str1 = "I love ";4 char *str2 = "China";5 strcat(str1,str2);6 printf("%s\n", str1);7 return 0;8 }
vc编译通过但运行失败。原因如下:
1 while ((*strDest++ = *strSrc++) != '\0')2 {3 ;4 }
如果此时strDest是一个指针,这时*strDest就是取一个未知地址的值,系统是不允许的。当strDest是一个数组时就正确了,因为数组分配的是连续的地址。安全地址当然可以使用了。
真正的以指针为参数的字符串拼接函数:
1 char *strcat(char *strDest, char *strSrc) 2 { 3 assert((strDest != NULL) && (strSrc != NULL)); 4 char *address = (char *)malloc((strlen(strDest) + strlen(strSrc) + 1)*sizeof(char)); 5 char *tmp = address; 6 assert(address != NULL); 7 while (*strDest != '\0') 8 { 9 *address = *strDest;10 strDest++;11 address++;12 }13 while (*strSrc != '\0')14 {15 *address = *strSrc;16 strSrc++;17 address++;18 }19 *address = '\0';20 return tmp;21 }
转载于:https://www.cnblogs.com/guoyuqiangf8/archive/2012/01/14/2322542.html
strcat函数使用中出现的问题相关推荐
- C语言标准库之strcat函数
2018-10-20 C库函数strcat()函数的功能是实现字符串的拼接.其函数原型如下所示 char *strcat(char *dest, const char *src) 1.参数说明 des ...
- strcat()函数常见问题
strcat(char *_Destination,const char *_Source)函数的功能是将后一个字符串粘贴到前一个字符串的末尾 原型 char *strcat(char *_Desti ...
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...
- c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型
实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, cons ...
- C和指针之strcat函数 strchr函数 strcmp函数 strcpy函数 strnchr函数 strstr函数实现
1 strcat函数实现 #include <stdio.h> //简单实现strcat函数 char *my_strcat(char *des, const char *src) {i ...
- strcpy与strcat函数原型
1.strcpy函数原型 char *my_strcpy(char *dest,const char *src) //const使在函数中不能修改*src其原先的值 { char *strDes ...
- strlen函数strcpy函数strcat函数的实现
一.strlen函数 作用:计算字符串第一次碰到'\0'的长度,不包含'\0'. #include<stdio.h> #include<assert.h>int Strlen( ...
- C语言 strcat函数实现
strcat()函数从名称来讲就是索的含义,用途:在一个字符串的末尾增加新的字符. 函数定义如下: char *strcat(char *dest, const char *src); 代码实现如下: ...
- c语言中strcat函数的作用,strcat函数的作用是什么?
strcat函数的作用是复制一个字符串,将这个字符串拼接在另一个字符串后面.strcat()函数接受两个字符串作为参数,会把第二个字符串的备份附加在第一个字符串末尾,并把拼接后形成的新字符串作为第一个 ...
- C语言 strcat 函数 - C语言零基础入门教程
目录 一.strcat 函数简介 二.strcat 函数原理 三.strcat 函数实战 四.注意 strcat 函数崩溃问题 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ...
最新文章
- js 验证数据类型的4中方法
- 论述Linux文件系统,linux文件系统概述
- 2016 Multi-University Training Contest 3
- 玩转oracle 11g(47):oracle删除非空表空间
- string 长度_String源码解析
- access在sql中横向求和_如何在Access查询中增加总和、平均查询列
- 设置TOMCAT TITLE 、 内存大小 、jdk路径
- Bellman-ford算法、SPFA算法、SPFA判断负环(附例题)
- 信息安全体系建设(一)
- 永恒之蓝漏洞补丁-MS17010补丁列表KB号
- 深入解析 Raft 模块在云溪数据库中的优化改造(上)
- SSD算法详解default box
- android flash插件下载地址,adobe flash player
- 程序员英语再渣也要会的单词
- Python Django框架下做电商项目
- typora上传图片出现Can‘t find smms config错误
- oracle 递归层次查询
- ACM.大一寒假2.15考试
- 电音(5)Bass类电音
- 玩家自述:遇到欠费请拨9电话骗局如何应对?
热门文章
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_8_File类遍历(文件夹)目录功能...
- 爬kuku漫画网站的小爬虫
- ICMP(网际控制报文协议)
- 事件--[Asp.Net]
- 海量数据库解决方案2011031001
- 一起学Windows phone7开发(五.一个时钟的例子)
- 【HANA系列】SAP HANA中null变成问号的问题
- Leetcode961. N-Repeated Element in Size 2N Array重复N次的元素
- 使用Flink实现索引数据到Elasticsearch
- Python中的self和init