这一章我们来了解下另外几个字符串处理函数:
1. strcmp函数
strcmp用于比较两个字符串,它是将两个字符串自左向右逐个字符比较,一直到遇到\0或不同的字符为止。
它的原型如下:int strcmp (const char *__s1, const char *__s2)它返回一个int类型的值
请看下面的例子:
从上面的例子我们可以看到,在比较的时候strcmp通过ascii来进行逐个比较,然后返回的值就是对应不同字符的ascii值相减,所以当前一个字符串比后一个字符串小时,返回负数,如果前一个字符串比后一个字符串大时返回正数,相同时返回0,。
这里需要注意它的大小比较在出现不同字符时就结束了,当有不同字符时,后面的字符并不会被比较。
2. strncmp函数
strncmp和strcmp函数一样也是比较两个字符串的大小,所不同的就是strncmp可以设定比较的长度,可以指定比较多少个字符停止。
它的原型是:int strncmp (const char *__s1, const char *__s2, size_t __n),也是返回一个int类型的值
我们来看一下下面的例子:
我们可以看到strcmp和strncmp两个函数,如果strncmp在指定长度内两个字符串有不同,那么其实并不影响结果,但是如果在指定长度内两个字符串刚好相同,那么strncmp就会返回0,认为是相同的。
3. strcpy函数
strcpy函数是复制一个字符串到目标字符串中。
它的原型为:char *strcpy (char *__restrict __dest, const char *__restrict __src),返回dest数组的首地址。
这个当第二个字符串长度大于第一个字符串长度时,strcpy并不检查目标数组是否能存下,虽然也复制了过去,但是多余部分被写入了后面的地址,很有可能引起程序奔溃。
4. strncpy函数
上面我们说strcpy不检查目标数组是否能存下被复制数组,那么strncpy给了我们另一种复制字符串的形式,它可以指定最大复制长度。在复制中记得在目标数组中给 \0 留个位置。
我们看一下原型:
har *strncpy (char *__restrict __dest,const char *__restrict __src, size_t __n),它同样返回目标字符串的地址,第三个参数规定了最大复制长度。
这里也需要注意在复制的时候要给 \0留个位置,要不然假如后面的一个数组正好相邻,就和我的例子里一样,那么同样会出现错误。