字符串函数的介绍与模拟实现

Posted 敲代码的小星星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串函数的介绍与模拟实现相关的知识,希望对你有一定的参考价值。


本系列历史文章

字符串函数的介绍与模拟实现(一)

引言

在这里插入图片描述
上面一篇文章已经讲到四个字符串函数的模拟实现(字符串函数的介绍与模拟实现(一)),上一节聊到的字符串函数都是不受长度限制,今天我们来聊一聊strncpy,strncat,strncmp这几个函数,它们都是受长度限制,安全性更高。

一、strncpy函数的介绍与模拟实现

strncpy函数的介绍

strcpy函数是将num个字符串拷贝到另一端字符串中,与strcpy不同的是,这个函数有个数限制,函数形参和返回类型如下:

char * strcat ( char * destination, const char * source );

需要注意几点的是:

  1. 两段字符串都要以’\\0’结束;
  2. 目标字符串空间要足够大,可以放得下num个字符;
  3. 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加’\\0’,直到num个

strncpy函数的模拟实现

与上一文所聊到的strcpy函数的模拟实现方法相类似,我们要利用好num来加以控制。
strncpy的模拟实现如下:

char* my_strncpy(char* dest, const char* src,int num)
{
	//确保指针的可靠性
	assert(dest != NULL);
	assert(src != NULL);
	//保留目标字符串的起始位置
	char* start = dest;
	//拷贝字符串
	while (num-- && (*dest++ = *src++))
	{
		;
	}
	//如果有剩余份数,那么将它拷贝'\\0'
	if (num)
		while (num--)
			*dest++ = '\\0';
	//返回目标函数的起始位置
	return start;

二、strncat函数的介绍与模拟实现

strncat函数的介绍

strncat是将num个字符串追加到一段字符串的后面,函数形参和返回类型如下:

char * strncat ( char * destination, const char * source, size_t num );

值得注意的是:

  1. 两段字符串都要以’\\0’结束;
  2. 目标字符串空间要足够大,可以放得下num个字符

我们要知道,这个函数可以实现一段字符串可以给自己追加,与strcpy不同。

strncat函数的模拟实现

strncat的模拟实现如下:

char* my_strncat(char* dest, const char* src, int num)
{
	//确保指针的可靠性
	assert(dest != NULL);
	assert(src != NULL);
	//保留目标字符串的起始位置
	char* start = dest;
	//找到目标字符串'\\0'位置
	while (*dest++);
	dest--;
	while (num--)
	{
		if (*dest++ = *src++)
			//返回目标函数的起始位置
			return start;
	}
	*dest = '\\0';
	//返回目标函数的起始位置
	return start;
}

三、strncm函数的介绍与模拟实现

strncmp函数介绍

strncmp是将两段字符串的num个字符一一进行比较ASCLL码值的大小,相同返回0,前者大于后者返回大于0的数,反之返回小于0的数,函数形参和返回类型如下:

int strncmp ( const char * str1, const char * str2, size_t num );

函数返回类型是int,如何比较?比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

strncmp函数的模拟实现

strncmp函数的模拟实现如下:

int my_strncmp(const char*dest, const char*src, int num)
{
	//确保指针的可靠性
	assert(dest != NULL);
	assert(src != NULL);
	while (num--)
	{
		if (*dest++ == *src++)
		{
			;
		}
		else
			return (*dest - *src);
	}
	//相等返回0
	return 0;
}

总结

今天就先聊到这,这几个函数的模拟实现我们应该要知道并且自己掌握,后续我还会介绍其他的几个字符串函数,欢迎搭建点赞支持与指正~
在这里插入图片描述

以上是关于字符串函数的介绍与模拟实现的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# C语言字符串与内存库函数的介绍与模拟实现

通过模拟strcpy函数学习编程思想

C语言———字符与字符串

字符和字符串函数的这些知识你知道吗?超硬核3w字文章带你领略C语言字符与字符串的美!!!

C语言篇 + 字符串处理函数和内存函数的介绍及模拟实现(避开你的语法坑,请注意查收)

开心模拟—— 用C模拟实现memcpy和memmove函数