strcmp(第二十八章字符串处理函数strcmpstrncmpstrcpystrncpy)

管理员 2024-11-25 11:47:59 0

这一章我们来了解下另外几个字符串处理函数:

1. strcmp函数

strcmp用于比较两个字符串,它是将两个字符串自左向右逐个字符比较,一直到遇到\0或不同的字符为止。

它的原型如下:int strcmp (const char *__s1, const char *__s2)它返回一个int类型的值

请看下面的例子:

第二十八章、字符串处理函数-strcmp、strncmp、strcpy、strncpy

从上面的例子我们可以看到,在比较的时候strcmp通过ascii来进行逐个比较,然后返回的值就是对应不同字符的ascii值相减,所以当前一个字符串比后一个字符串小时,返回负数,如果前一个字符串比后一个字符串大时返回正数,相同时返回0,。

这里需要注意它的大小比较在出现不同字符时就结束了,当有不同字符时,后面的字符并不会被比较。

2. strncmp函数

strncmp和strcmp函数一样也是比较两个字符串的大小,所不同的就是strncmp可以设定比较的长度,可以指定比较多少个字符停止。

它的原型是:int strncmp (const char *__s1, const char *__s2, size_t __n),也是返回一个int类型的值

我们来看一下下面的例子:

第二十八章、字符串处理函数-strcmp、strncmp、strcpy、strncpy

我们可以看到strcmp和strncmp两个函数,如果strncmp在指定长度内两个字符串有不同,那么其实并不影响结果,但是如果在指定长度内两个字符串刚好相同,那么strncmp就会返回0,认为是相同的。

3. strcpy函数

strcpy函数是复制一个字符串到目标字符串中。

它的原型为:char *strcpy (char *__restrict __dest, const char *__restrict __src),返回dest数组的首地址。

第二十八章、字符串处理函数-strcmp、strncmp、strcpy、strncpy

这个当第二个字符串长度大于第一个字符串长度时,strcpy并不检查目标数组是否能存下,虽然也复制了过去,但是多余部分被写入了后面的地址,很有可能引起程序奔溃。

4. strncpy函数

上面我们说strcpy不检查目标数组是否能存下被复制数组,那么strncpy给了我们另一种复制字符串的形式,它可以指定最大复制长度。在复制中记得在目标数组中给 \0 留个位置。

我们看一下原型:

har *strncpy (char *__restrict __dest,const char *__restrict __src, size_t __n),它同样返回目标字符串的地址,第三个参数规定了最大复制长度。

第二十八章、字符串处理函数-strcmp、strncmp、strcpy、strncpy

这里也需要注意在复制的时候要给 \0留个位置,要不然假如后面的一个数组正好相邻,就和我的例子里一样,那么同样会出现错误。

相关文章