C字符串和内存函数介绍(二)——长度不固定的字符串函数

前面我们一起学习了strlen,strcpy,strcmp,strcat的使用以及它们的模拟实现,它们的特点是你传参的时候,传过去的是数组首元素的地址,然后无论是计算长度,实现拷贝,相互比较还是进行追加,处理的对象的都是整个字符串。

但是有时候我们的需求可能仅仅只是针对字符串的一部分实现拷贝,进行比较和追加的相关逻辑,也就是待处理的字符串的长度不应该只是默认的“整个字符串”,有时候让我们的用户来决定可能会更好。据此,引入了今天我们的三大主角,它们分别是:

strncpy进行长度不固定的字符串的拷贝,拷贝多少用户说了算!
strncmp进行长度不固定的字符串的比较,比较哪一部分字符用户说了算!
strncat进行长度不固定的字符串的追加,追加多少字符用户说了算!

接下来,让我们一一来对它们进行认识。

注:这一部分函数的学习我们仅需要对函数各个使用场景有所了解即可,模拟实现不再是重点。

目录

(一)strncpy函数:

介绍:

注意事项:

(二)strncmp函数:

介绍:

(三)strncat函数:

介绍:

注意事项:


(一)strncpy函数:

介绍:

函数原型:

char * strncpy ( char * destination, const char * source, size_t num );
函数名功能描述头文件
strncpysource中前num个字符拷贝到目标空间destination#include<string.h>

返回值说明:返回的是目标空间destination的地址。

注意事项:

第一、strncpy函数不会在拷贝的最后自动带上'\0',如果拷贝给destination的字符串中本没有'\0',同时destination本身也没有'\0',那destination的内容是什么这是不可知的。如图所示:

我们推介的写法是下面这种的:

第二、如果参数num>source中已有的字符个数,则多出来的部分会用'\0'进行填补追加,直至num个。值得注意的是:这个过程不受destination本身长度的限制,也就是说如果num>strlen(destination)程序会出现问题——数组的越界访问。

(二)strncmp函数:

介绍:

函数原型:

int strncmp ( const char * str1, const char * str2, size_t num );
函数名功能描述头文件
strncmp从左到右依次比较str1str2的前num个字符的ASCLL码值#include<string.h>

返回值说明:是一个整数,用于表示str1和str2的大小关系。详情见下表:

return value含义
<0表明str1 < str2
=0表明str1 == str2
>0表明str1 > str2

(三)strncat函数:

介绍:

函数原型:

char * strncat ( char * destination, const char * source, size_t num );
函数名功能描述头文件
strncatsource字符串中前num个字符追加到destination后面,并加'\0'#include<string.h>

注意事项:

  1. 目标空间destination的内存务必足够大,至少能同时放下source和destination两个字符串内容的数据。
  2. 越界追加的问题:即如果num>strlen(souce),函数也仅对souce本身进行追加,不会过度追加。
  3. 和strcat不同的是,由于strncat函数的特殊机制,strncat函数一般是允许自己追加自己的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值