字符串函数的实现(三)之strcat
C语言中的字符串函数有如下这些
- 获取字符串长度
- strlen
- 长度不受限制的字符串函数
- strcpy
- strcat
- strcmp
- 长度受限制的字符串函数
- strncpy
- strncat
- strncmp
- 字符串查找
- strstr
- strtok
- 错误信息报告
- strerror
长度不受限制的字符串函数
strcat
老规矩,我们还是看看文档是怎样说的,如下
char * strcat ( char * destination, const char * source );
Concatenate strings
连接字符串
Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination.
追加一个源字符串的拷贝到目的字符串中。在目的字符串中的'\0'会被源字符串的第一个字符重写,然后'\0'会在新字符串的最后面。
destination and source shall not overlap.
目的字符串和源字符串不应该重叠
可以知道
- 源字符串必须以
'\0'结束。 - 虽然文档没说目标空间必须足够大,但是想一想还是可以知道的,即目标空间必须有足够大,能容纳下源字符串的内容,不然就追加不上了
实现
断言指针不为空是个好习惯~
char* my_strcat(char* dest, const char* src)
{
assert(dest != NULL);
assert(src);
char* rest = dest;
// 1. 找到目的字符串的'\0'
while (*dest != '\0')
{
dest++;
}
// 2. 追加,就是字符串拷贝了,和之前的strcpy的实现一样
while (*dest++ = *src++)
{
;
}
return rest;
}
int main()
{
//char arr1[] = "hello";
//char arr2[] = "world";
//// 把arr2追加到arr1上
//strcat(arr1, arr2);
//printf("%s\n", arr1);
// 会报错,空间不够,上面的写法是错误的
// 可以给arr1的大小固定一个大的空间,比如arr1[30]
char arr1[30] = "hello\0xxxxxxxxx";
char arr2[] = "world";
// 把arr2追加到arr1上
//strcat(arr1, arr2);
my_strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
总的来说,实现的思路就是,把源字符串追加到目的字符串的后面,从而实现字符串连接。问题就在于如何找到目的字符串的尾部,很简单,就直接找'\0',找到'\0'就进行追加,追加就是直接复制源字符到目的空间,以此循环,复制直到遇到'\0'就结束,这样就完成了字符串的连接了。
字符串函数的实现(三)之strcat的更多相关文章
- 实现字符串函数,strlen(),strcpy(),strcmp(),strcat()
实现字符串函数,strlen(),strcpy(),strcmp(),strcat() #include<stdio.h> #include<stdlib.h> int my_ ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- js字符串转换为数字的三种方法。(转换函数)(强制类型转换)(利用js变量弱类型转换)
js字符串转换为数字的三种方法.(转换函数)(强制类型转换)(利用js变量弱类型转换) 一.总结 js字符串转换为数字的三种方法(parseInt("1234blue"))(Num ...
- 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...
- BCB常用文件与字符串函数
VCL库函数简介 一.BORLAND C++ BUILDER VCL的内存管理函数 1. AllocMem 在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下: void * ...
- 13-C语言字符串函数库
目录: 一.C语言字符串函数库 二.用命令行输入参数 回到顶部 一.C语言字符串函数库 1 #include <string.h> 2 字符串复制 strcpy(参数1,参数2); 参数1 ...
- C语言 > 字符串和字符串函数
输入 gets() 函数 : 1.gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区. 2.可以用来输入带空格的字符串. 3.可以无限读取, ...
- 《C prime plus (第五版)》 ---第11章 字符串和字符串函数---2
11-3:字符串 输出 三个标准的函数:puts() fputs() printf() 1.puts()函数: #include<stdio.h> #define DEF "I ...
- C语言相关的基础字符串函数
C语言中没有专门的字符串类型,所以就用字符数组和字符指针形式表示 1 char arr[]="abcdef"; //字符数组表示的字符串 2 char*arr="abce ...
随机推荐
- Window下Scala开发环境搭建
在Windows下搭建Scala开发环境,需要做以下几个步骤 1) 安装JDK 2) 安装Scala,并配置环境变量 3) Idea安装并创建Scala 类 1.安装JDK JDK安装,这里不再介绍, ...
- 一文学会Dockerfile语法
接应上篇,续讲前文.今天咱来聊一下Dockerfile的使用 . 虽然可以通过docker commit命令来手动创建镜像,但是通过Dockerfile文件,可以帮助我们自动创建镜像,并且能够自定义创 ...
- 开源OA办公系统的“应用市场”,能够为协同办公开拓什么样的“前路”?
在我们的日常生活中,应用市场这个词,总是与智能手机划上等号,不管使用的是iPhone还是安卓,总会接触到手机上的APP应用市场,我们可以在应用市场中,选择自己所需要的APP应用软件,下载使用后,可以让 ...
- http接口的学习(暂时只是记录,测试之后重新更新)
链接1:https://blog.csdn.net/java173842219/article/details/54020168 链接2:https://blog.csdn.net/u01132074 ...
- Django Admin后台管理功能使用+二次开发
一 使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7 (Windows x86-64 executable in ...
- Docker-compose编排微服务顺序启动
一.概述 docker-compose可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序.docker-comp ...
- Python3.x 基础练习题100例(31-40)
练习31: 题目: 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. 程序 ...
- 后端程序员之路 18、朴素贝叶斯模型(Naive Bayesian Model,NBM)
贝叶斯推断及其互联网应用(一):定理简介 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.ht ...
- Service Cloud 零基础(五)Trailhead学习 Embedded Chat
本篇参考:https://trailhead.salesforce.com/content/learn/modules/web-chat 想一下我们为什么要用service cloud呢?为什么要有s ...
- 如何自学成 Python 大神?这里有些建议
人生苦短,我用 Python.为什么?简单明了的理由当然是开发效率高.但是学习 Python 的初学者往往会面临以下残酷的现状:网上充斥着大量的学习资源.书籍.视频教程和博客,但是大部分都是讲解基础知 ...