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

 更新时间:2022年05月05日 14:35:57   作者:<vince>  
strcat是用来拼接字符串的,它会将参数 src 字符串复制到参数 dest 所指的字符串尾部,本章带你了解它的使用并模拟实现它

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函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入N皇后问题的两个最高效算法的详解

    深入N皇后问题的两个最高效算法的详解

    本篇文章是对N皇后问题的两个最高效的算法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言员工信息管理系统源代码

    C语言员工信息管理系统源代码

    这篇文章主要为大家详细介绍了C语言员工信息管理系统源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 二维指针动态分配内存连续问题深入分析

    二维指针动态分配内存连续问题深入分析

    当我们定义一个二维指针时,如果需要存储相应的数据,就需要我们动态的分配内存,这时,有一点是需要注意的,分配内存的方法不同,内存的连续性也是不相同的
    2013-07-07
  • Linux中利用c语言删除某个目录下的文件

    Linux中利用c语言删除某个目录下的文件

    这篇文章主要给大家介绍了Linux中利用c语言删除某个目录下文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • STL常用容器详细解析

    STL常用容器详细解析

    这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)
    2013-09-09
  • C++单例模式的实例详解

    C++单例模式的实例详解

    这篇文章主要介绍了C++单例模式的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • C++ 随机数与随机种子数的实例

    C++ 随机数与随机种子数的实例

    这篇文章主要介绍了C++ 随机数与随机种子数的实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • C语言 函数缺省参数详情

    C语言 函数缺省参数详情

    这篇文章主要介绍了C语言 的函数缺省参数、除了介绍函数全缺省参数,和半缺省参数还简单介绍了函数声明、函数调用等一些函数的定义,需要的朋友可以参考下面文章内容
    2021-09-09
  • 基于Matlab实现嗅觉优化算法的示例代码

    基于Matlab实现嗅觉优化算法的示例代码

    嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。本文将利用Matlab实现这一智能优化算法,需要的可以参考一下
    2022-05-05
  • C# CLR 中学习 C++关键词extern使用详解

    C# CLR 中学习 C++关键词extern使用详解

    这篇文章主要为大家介绍了C# CLR 中学习 C++ 之extern使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论