C语言的五个库函数的模拟实现

strcmp函数

功能

在这里插入图片描述
strcmp函数用于比较两个字符串。会比较两个字符串中的字符,直到找到不同字符或者到字符串的结尾。总结其功能为:

  • 如果第一个字符串小于第二个字符串,返回一个<0的数
  • 如果两个字符串相等,返回0
  • 如果第一个字符串大于第二个字符串,返回一个>0数

模拟实现

int my_strcmp(const char* str1,const char* str2)
{
    //首先判断*str1不为空,判断*str1和*str2是否相等,
    //之间加一个&&可以确定*str1和*str2都不为空且还能判断*str1和*str2是否相等
	while (*str1 && (*str1 == *str2))
	{
		//每判断一个字母向后走一位
		str1++;
		str2++;
	}

	//函数返回值是int,char类型相减是ASII码值,能直接返回
	return *(const unsigned char *)str1 - *(const unsigned char *)str2;
}

strstr函数

功能

在这里插入图片描述
strstr函数的功能是:

  • 在一个字符串中查找另一个字符串出现
  • 在主字符中查找子字符串,找到返回子字符串的第一个字符
  • 没有则返回NULL

模拟实现

char* my_strstr(const char* str1,const char* str2)
{
	//先判断子字符串是否为空,为空则返回主字符串
	if (!*str2)
	{
		return (char*)str1;
	}

	//遍历主字符串
	for (; *str1; str1++)
	{
	    //临时指针,用于失败回溯
		const char* a = str1;
		const char* b = str2;

		//判断是否为空和子字符串主字符串是否相等
		while(*a&&*b && (*a == *b))
		{
			a++;
			b++;
		}

		//当*b结束返回主字符串
		if (!*b)
		{
			return (char*)str1;
		}

	}

	return nullptr;
}

strncpy函数

功能

在这里插入图片描述
strncpy函数的功能是:

  • 在一个字符串中复制num个字符到另外一个字符串中
  • num值最大复制长度

模拟实现

char* my_strncpy(char* dest, const char* src, size_t n) {
	//临时指针
	char* original_dest = dest; 

	//在n用完之前或者src结尾
	while (n > 0 && *src != '\0') {
		*dest++ = *src++;
		--n;
	}

	while (n > 0) {
		*dest++ = '\0';
		--n;
	}

	return original_dest;
}

strncat函数

功能

在这里插入图片描述
strncat函数的功能是:

  • 在一个字符串末尾追加另一个字符串
  • n是你指定的最大追加长度

模拟实现

char* my_strncat(char* dest, const char* src, size_t n)
{
	char* dest_end = dest;
	while (*dest_end != '\0')
	{
		dest_end++;
	}

	while (*src != '\0'&&n > 0)
	{
		*dest_end++ = *src++;
		n--;
	}

	*dest_end = '\0';

	return dest;
}

memcpy函数

功能

在这里插入图片描述
memcpy函数的功能是:

  • 内存中复制数据块
  • memcpy 就是用于在内存中复制一个数据块到另一个位置,你可以指定要复制的字节数。

模拟实现

void* my_memcpy(void* dest, const void* src, size_t n)
{
	char *d = (char *)dest;
	const char *s = (const char *)src;

	for (size_t i = 0; i < n; i++) {
		d[i] = s[i];
	}

	return dest;
}

相关推荐

  1. 函数模拟实现

    2024-07-18 19:44:04       38 阅读
  2. C语言——oj刷题——模拟实现函数strlen

    2024-07-18 19:44:04       51 阅读
  3. 深入C语言:字符与字符串函数模拟实现

    2024-07-18 19:44:04       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 19:44:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 19:44:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 19:44:04       58 阅读
  4. Python语言-面向对象

    2024-07-18 19:44:04       69 阅读

热门阅读

  1. opencv—常用函数学习_“干货“_5

    2024-07-18 19:44:04       25 阅读
  2. 光伏储能剑指何方

    2024-07-18 19:44:04       20 阅读
  3. Web前端-Web开发CSS基础5-浮动

    2024-07-18 19:44:04       18 阅读
  4. 【J1期末测试】学习之星

    2024-07-18 19:44:04       24 阅读
  5. MySQL 溢出页、页分裂、表空间碎片

    2024-07-18 19:44:04       23 阅读
  6. mysql8和mysql5版本在使用mybatis框架时的注意事项

    2024-07-18 19:44:04       24 阅读
  7. C++基础语法:STL之容器(3)--序列容器中的deque

    2024-07-18 19:44:04       18 阅读