彻底掌握C语言strcat函数的用法

目录
  • 1.函数介绍
    • 1.1.函数接口
    • 1.2.函数分析
    • 1.3.函数的简单使用
  • 2.库函数strcat源代码
    • 库函数分析
  • 3.模拟实现 strcat 函数
    • 模拟实现
    • 总结分析
  • 写在后面

strcat函数详解如下

1.函数介绍

1.1.函数接口

char* __cdecl strcat (char * dst, const char * src);

这里是库函数里面的函数定义接口。这个函数是将字符串src连接到dst中去,就是连接字符串函数。

1.2.函数分析

分析:

1、dst 和 src 字符串结尾都必须含有 ’ \0 ';

2、dst 字符串是可变的,不能用 const 修饰;src 可以用 const 修饰。

3、就是 dst 目标字符串的空间必须足够大。

4、该函数返回值是字符指针类型。

1.3.函数的简单使用

代码展示如下:

int main()
{
	char ch1[20] = "Hello";
	char ch2[] = "World";
	strcat(ch1, ch2);
	printf("%s\n", ch1);
	return 0;
}

图解分析:

strcat函数连接前:

strcat函数连接后:

2.库函数strcat源代码

char * __cdecl strcat (char * dst, const char * src)//__cdecl:是函数调用约定
{
	char * cp = dst;
	while( *cp )
	cp++;                 //find end of dst
	while((*cp++ = *src++) != '\0') ;       //Copy src to end of dst
	return( dst );                  //return dst
}

库函数分析

分析:

1、这里 dst 就没有用 const 修饰,而 src 就可以用 const 修饰。

2、这里定义一个新的字符指针 cp 指向 dst 起始位置,然后 cp 开始循环操作,dst 这个指针始终指向字符串开头,最终返回 dst 指向的字符串。

3、先要找目标空间那个起始字符串的尾部,然后再在后面连接。

4、while((*cp++ = *src++) != ‘\0’) ; 这一句就以最简洁的代码实现字符串连接。

3.模拟实现 strcat 函数

模拟实现

char* my_strcat(char* str1, const char* str2)
{
	char* first = str1;
	assert(str1 && str2);
	//目标空间的'\0'
	while (*str1 != '\0')
	{
		str1++;
	}
	//追加内容到目标空间
	while (*str1++ = *str2++)
	{
		;
	}
	return first;
}
int main()
{
	char ch1[20] = "Hello";
	char ch2[] = "World";
	printf("%s\n", my_strcat(ch1, ch2));//这里包含链式访问
	return 0;
}

总结分析

1、这是模拟实现strcat函数,里面相关的细节和源代码中的相同。

2、链式访问:就是把一个函数的返回值当作另一个函数的参数来使用,就是链式访问。

写在后面

友友们,相聚的时刻总是短暂的,又到了说再见的时候啦~  但是字符串这一块经常在面试的时候会出模拟实现某某字符串函数的面试题,因此我们不能只会平时利用头文件直接调用而不去摸清原理哈~ 要做到 摸清、拿捏、吃透 字符串函数。

以上代码均可运行,所用编译环境为 vs2019 ,运行时注意加上编译头文件#define _CRT_SECURE_NO_WARNINGS 1

到此这篇关于彻底掌握C语言strcat函数的用法的文章就介绍到这了,更多相关C语言strcat函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言 模拟实现strcpy与strcat函数详解

    目录 一.strcpy函数的介绍 1.函数的声明 2.函数功能与注意事项 3.函数的使用 二.模拟实现strcpy函数 1.模拟分析 2.模拟实现 三.strcat函数的介绍 1.函数的声明 2.函数功能与注意事项 3.函数的使用 四.模拟实现strcat函数 1.模拟分析 2.模拟实现 总结 这里有超详细的函数模实现分享,带大家一起来模拟实现这些函数,后续还将更新更多的函数模拟实现的文章. 一.strcpy函数的介绍 1.函数的声明 char* strcpy(char * destinatio

  • C语言中字符串常用函数strcat与strcpy的用法介绍

    strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串.返回指向dest的指针.函数实现: 复制代码 代码如下: /********************** * C语言标准库函数strcpy的一种典型的工业级的

  • C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解

    目录 一.strlen函数模拟 二. strcpy函数模拟  三.strcat函数模拟 四.strcmp函数模拟 总结 一.strlen函数模拟 字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包括'\0'); 有三种方法可以实现该操作: ①计数器方式 ②不能创建临时变量计数器 ③指针-指针  方法一:计数器方式 int my_strlen(const char* str) { int count = 0;//定义count用来记录字符串数组中字符数

  • 浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, const char *strSrc) { char *res=strDest; assert((strDest!=NULL)&&(strSrc!=NULL)); while(*strDest)strDest++; while(*strDest=*strSrc) { strDest++; strSrc

  • C语言 不使用strcat函数实现连接两个字符串功能代码

    字符串连接函数:  字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,在字符串处理函数中,strcat  函数具有字符串连接功能.下面是用C语言实现不使用是strcat 函数实现连接两个字符串的功能. 源代码: #include<stdio.h> void constring(char s[],char t[],char q[]); //函数声明 int main(void) { char s[100]; char q[100]; char t[200]; prin

  • C语言中strlen() strcpy() strcat() strcmp()函数的实现方法

    strlen函数原型:unsigned int strlen(const char *);返回的是字符串中第一个\0之前的字符个数. 1.strcat函数原型char* strcat(char* dest,const char* src); 进行字符串的拼接,将第二个字符串连接到第一个字符串中第一个出现\0开始的地方.返回的是拼接后字符的首地址.并不检查第一个数组的大小是否可以容纳第二个字符串.如果第一个数组的已分配的内存不够容纳第二个字符串,则多出来的字符将会溢出到相邻的内存单元. 2.str

  • 彻底掌握C语言strcat函数的用法

    目录 1.函数介绍 1.1.函数接口 1.2.函数分析 1.3.函数的简单使用 2.库函数strcat源代码 库函数分析 3.模拟实现 strcat 函数 模拟实现 总结分析 写在后面 strcat函数详解如下 1.函数介绍 1.1.函数接口 char* __cdecl strcat (char * dst, const char * src); 这里是库函数里面的函数定义接口.这个函数是将字符串src连接到dst中去,就是连接字符串函数. 1.2.函数分析 分析: 1.dst 和 src 字符

  • GO语言延迟函数defer用法分析

    本文实例讲述了GO语言延迟函数defer用法.分享给大家供大家参考.具体分析如下: defer 在声明时不会立即执行,而是在函数 return 后,再按照 FILO (先进后出)的原则依次执行每一个 defer,一般用于异常处理.释放资源.清理数据.记录日志等.这有点像面向对象语言的析构函数,优雅又简洁,是 Golang 的亮点之一. 代码1:了解 defer 的执行顺序 复制代码 代码如下: package main import "fmt" func fn(n int) int {

  • Linux 中C语言getcwd()函数的用法

    Linux 中C语言getcwd()函数的用法 先来看该函数的声明: #include<unistd.h> char *getcwd(char *buf,size_t size); 介绍: 参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数size为buf的空间大小. 普通的用法会是这样: #define MAX_SIZE 255 char path(MAX_SIZE); getcwd(path,sizeof(path)); puts(path);

  • c语言abort函数实例用法

    1.abort函数的作用是异常终止一个进程,意味着abort后面的代码将不再执行. 2.当调用abort函数时,会导致程序异常终止,而不会进行一些常规的清除工作. 实例 #include <stdio.h> #include <stdlib.h> int main(void) { puts( "About to abort..../n" ); abort(); puts( "This will never be executed!/n" );

  • Go语言基础函数基本用法及示例详解

    目录 概述 语法 函数定义 一.函数参数 无参数无返回 有参数有返回 函数值传递 函数引用传递 可变参数列表 无默认参数 函数作为参数 二.返回值 多个返回值 跳过返回值 匿名函数 匿名函数可以赋值给一个变量 为函数类型添加方法 总结 示例 概述 函数是基本的代码块,用于执行一个任务 语法 函数定义 func 函数名称( 参数列表] ) (返回值列表]){ 执行语句 } 一.函数参数 无参数无返回 func add() 有参数有返回 func add(a, b int) int 函数值传递 fu

  • 彻底掌握C语言strcpy函数的用法

    目录 1.函数介绍 1.1.函数接口 1.2.函数分析 2.库函数strcpy源代码 2.1.库函数分析 3.模拟实现strcpy函数 3.1.模拟实现 写在后面 strcpy函数详解如下 1.函数介绍 1.1.函数接口 char * __cdecl strcpy(char * dst, const char * src); 这里是库函数里面的函数定义接口.该函数作用是将一组字符串复制到另一组字符串中去,就是所谓的 复制字符串函数. 1.2.函数分析 1.这里是将源字符串拷贝到目标字符串空间中去

  • C语言浅析函数的用法

    目录 问题引入 函数 C语言中函数的语法形式 问题 例子 函数的调用过程 函数声明 变量声明 数组声明 问题引入 有时候,我们经常需要在一个程序中,对一个数组进行 键盘输入,打印数组元素值. 有些代码块,功能是相同的,只有数组名和元素个数等参数不一样, 代码形式是一样的,对于同一功能而不同参数的代码块,那么咱就可以 将其封装成一个函数,如果您需要用到这样的功能或者代码块,那么我们 就不需要重复的去写代码块,我们只需要调用这个函数. 函数 函数是完成某个功能的指令序列的封装. 函数有什么特点: 相

  • 易语言lineto函数的用法总结

    是lineto函数的用法,隶属于gdi32.dll ! vb声明: VB声明 Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long 说明 用当前画笔画一条线,从当前位置连到一个指定的点.这个函数调用完毕,当前位置变成x,y点 返回值 Long,非零表示成功,零表示失败 参数表 参数 类型及说明 h

  • R语言-summary()函数的用法解读

    summary():获取描述性统计量,可以提供最小值.最大值.四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等. 结果解读如下: 1. 调用:Call lm(formula = DstValue ~ Month + RecentVal1 + RecentVal4 + RecentVal6 + RecentVal8 + RecentVal12, data = trainData) 当创建模型时,以上代码表明lm是如何被调用的. 2. 残差统计量:Residuals Min 1Q M

  • C语言sqrt函数的实例用法讲解

    c语言sqrt函数的用法 sqrt函数用于计算一个非负实数的平方根. sqrt的函数原型: 在VC6.0中的math.h头文件的函数原型为double sqrt(double); 说明:sqrt即Square Root Calculations(平方根计算),通过这种运算可以考验CPU的浮点能力. 头文件:math.h 程序示例: #include <math.h> #include <stdio.h> int main(void) { double x = 4.0, result

随机推荐