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函数使用中出现的问题相关推荐

  1. C语言标准库之strcat函数

    2018-10-20 C库函数strcat()函数的功能是实现字符串的拼接.其函数原型如下所示 char *strcat(char *dest, const char *src) 1.参数说明 des ...

  2. strcat()函数常见问题

    strcat(char *_Destination,const char *_Source)函数的功能是将后一个字符串粘贴到前一个字符串的末尾 原型 char *strcat(char *_Desti ...

  3. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数

    strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...

  4. c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, cons ...

  5. C和指针之strcat函数 strchr函数 strcmp函数 strcpy函数 strnchr函数 strstr函数实现

    1  strcat函数实现 #include <stdio.h> //简单实现strcat函数 char *my_strcat(char *des, const char *src) {i ...

  6. strcpy与strcat函数原型

    1.strcpy函数原型 char *my_strcpy(char *dest,const char *src)    //const使在函数中不能修改*src其原先的值 { char *strDes ...

  7. strlen函数strcpy函数strcat函数的实现

    一.strlen函数 作用:计算字符串第一次碰到'\0'的长度,不包含'\0'. #include<stdio.h> #include<assert.h>int Strlen( ...

  8. C语言 strcat函数实现

    strcat()函数从名称来讲就是索的含义,用途:在一个字符串的末尾增加新的字符. 函数定义如下: char *strcat(char *dest, const char *src); 代码实现如下: ...

  9. c语言中strcat函数的作用,strcat函数的作用是什么?

    strcat函数的作用是复制一个字符串,将这个字符串拼接在另一个字符串后面.strcat()函数接受两个字符串作为参数,会把第二个字符串的备份附加在第一个字符串末尾,并把拼接后形成的新字符串作为第一个 ...

  10. C语言 strcat 函数 - C语言零基础入门教程

    目录 一.strcat 函数简介 二.strcat 函数原理 三.strcat 函数实战 四.注意 strcat 函数崩溃问题 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ...

最新文章

  1. js 验证数据类型的4中方法
  2. 论述Linux文件系统,linux文件系统概述
  3. 2016 Multi-University Training Contest 3
  4. 玩转oracle 11g(47):oracle删除非空表空间
  5. string 长度_String源码解析
  6. access在sql中横向求和_如何在Access查询中增加总和、平均查询列
  7. 设置TOMCAT TITLE 、 内存大小 、jdk路径
  8. Bellman-ford算法、SPFA算法、SPFA判断负环(附例题)
  9. 信息安全体系建设(一)
  10. 永恒之蓝漏洞补丁-MS17010补丁列表KB号
  11. 深入解析 Raft 模块在云溪数据库中的优化改造(上)
  12. SSD算法详解default box
  13. android flash插件下载地址,adobe flash player
  14. 程序员英语再渣也要会的单词
  15. Python Django框架下做电商项目
  16. typora上传图片出现Can‘t find smms config错误
  17. oracle 递归层次查询
  18. ACM.大一寒假2.15考试
  19. 电音(5)Bass类电音
  20. 玩家自述:遇到欠费请拨9电话骗局如何应对?

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_8_File类遍历(文件夹)目录功能...
  2. 爬kuku漫画网站的小爬虫
  3. ICMP(网际控制报文协议)
  4. 事件--[Asp.Net]
  5. 海量数据库解决方案2011031001
  6. 一起学Windows phone7开发(五.一个时钟的例子)
  7. 【HANA系列】SAP HANA中null变成问号的问题
  8. Leetcode961. N-Repeated Element in Size 2N Array重复N次的元素
  9. 使用Flink实现索引数据到Elasticsearch
  10. Python中的self和init