字符串函数的介绍与模拟实现
Posted 敲代码的小星星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串函数的介绍与模拟实现相关的知识,希望对你有一定的参考价值。
目录
本系列历史文章
引言
上面一篇文章已经讲到四个字符串函数的模拟实现(字符串函数的介绍与模拟实现(一)),上一节聊到的字符串函数都是不受长度限制,今天我们来聊一聊strncpy,strncat,strncmp这几个函数,它们都是受长度限制,安全性更高。
一、strncpy函数的介绍与模拟实现
strncpy函数的介绍
strcpy函数是将num个字符串拷贝到另一端字符串中,与strcpy不同的是,这个函数有个数限制,函数形参和返回类型如下:
char * strcat ( char * destination, const char * source );
需要注意几点的是:
- 两段字符串都要以’\\0’结束;
- 目标字符串空间要足够大,可以放得下num个字符;
- 如果源字符串的长度小于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 );
值得注意的是:
- 两段字符串都要以’\\0’结束;
- 目标字符串空间要足够大,可以放得下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语言字符串与内存库函数的介绍与模拟实现
字符和字符串函数的这些知识你知道吗?超硬核3w字文章带你领略C语言字符与字符串的美!!!