strlen是string中计算字符串长度的常用函数,当遇到字符串中的'\0'时,strlen会停止计算字符串的长度。
#include <string.h>
size_t strlen(const char *s);
strnlen也是string中计算字符串长度的常用函数,当遇到字符串中的'\0'时,strlen会停止计算字符串的长度。
#define _GNU_SOURCE
#include <string.h>
size_t strnlen(const char *s, size_t maxlen);
当s的长度小于maxlen,strnlen(s,maxlen)与strlen(s)返回结果一致。
当s的内部有'\0'时,strnlen(s,maxlen)的长度为'\0'之前的字符串长度。
注意事项:
在使用的过程中,我们经常会遇到strcpy拷贝字符串,若拷贝的字符串长度大于变量申请长度,依然能够执行成功,而此时再去使用strlen获取字符串长度时,就会发现字符串的长度大于sizeof变量的长度。
栗子:
char _src[20] = "1234567890";
char _des[5] = {'\0'};
strcpy(_des,_src);
printf("sizeof(_des)=%d--strlen(_des)=%d\n",sizeof(_des),strlen(_des));
执行结果
sizeof(_des)=5--strlen(_des)=10
所以获取字符串长度的时候要用strnlen。