【C语言】strlen函数使用及实现方法


1. C库函数strlen()

函数原型 size_t strlen(const char *str)
头文件:string.h
函数说明:计算字符串str的长度,直到空结束字符 '\0',但不包括空结束字符
返回值:返回一个无符号整数

2. 代码演示及运行结果

代码演示

点击查看代码
#include 
#include 

int main(void){
    char *str1 = "strlenTest";
    char str2[] = "strlenTest";
    char str3[] = {'s', 't', 'r', 'l', 'e', 'n', '\0'};
    char str4[] = {'s', 't', 'r', 'l', 'e', 'n'};
    printf("strlen(str1) = %ld, sizeof(str1) = %ld\n",strlen(str1), sizeof(str1));
    printf("strlen(str2) = %ld, sizeof(str2) = %ld\n",strlen(str2), sizeof(str2));
    printf("strlen(str3) = %ld, sizeof(str3) = %ld\n",strlen(str3), sizeof(str3));
    printf("strlen(str4) = %ld, sizeof(str4) = %ld\n",strlen(str4), sizeof(str4));
    return 0;
}

运行结果

3. 注意事项

  • 参数指向的字符串必须以 '\0' 结束
  • 字符串以 '\0'结尾,strlen返回的是字符串中 '\0'之前的字符的个数,不包括'\0',sizeof包括'\0'

4. 实现方法

方法1:

代码展示

点击查看代码
#include 
size_t strlen_my(const char *str){
    int count = 0;
    while(*str != '\0'){
        str++;
        count++;
    }
    return count++;
}
int main(void){
    char *str1 = "strlenTest";
    char str2[] = "strlenTest";
    char str3[] = {'s', 't', 'r', 'l', 'e', 'n', '\0'};
    char str4[] = {'s', 't', 'r', 'l', 'e', 'n'};
    printf("strlen_my(str1) = %ld\n",strlen_my(str1));
    printf("strlen_my(str2) = %ld\n",strlen_my(str2));
    printf("strlen_my(str3) = %ld\n",strlen_my(str3));
    printf("strlen_my(str4) = %ld\n",strlen_my(str4));
    return 0;
}

运行结果

方法2:

代码展示

点击查看代码
#include 
size_t strlen_my(const char *str){
    if(*str != '\0'){
        return 1 + strlen_my(str+1);
    }else {
        return 0;
    }
}
int main(void){
    char *str1 = "strlenTest";
    char str2[] = "strlenTest";
    char str3[] = {'s', 't', 'r', 'l', 'e', 'n', '\0'};
    char str4[] = {'s', 't', 'r', 'l', 'e', 'n'};
    printf("strlen_my(str1) = %ld\n",strlen_my(str1));
    printf("strlen_my(str2) = %ld\n",strlen_my(str2));
    printf("strlen_my(str3) = %ld\n",strlen_my(str3));
    printf("strlen_my(str4) = %ld\n",strlen_my(str4));
    return 0;
}

运行结果

方法3

代码展示

点击查看代码
#include 
size_t strlen_my(const char *str){
    const char *start = str;
    const char *end = str;
    while(*end != '\0'){
        end++;
    }
    return end-start;
}
int main(void){
    char *str1 = "strlenTest";
    char str2[] = "strlenTest";
    char str3[] = {'s', 't', 'r', 'l', 'e', 'n', '\0'};
    char str4[] = {'s', 't', 'r', 'l', 'e', 'n'};
    printf("strlen_my(str1) = %ld\n",strlen_my(str1));
    printf("strlen_my(str2) = %ld\n",strlen_my(str2));
    printf("strlen_my(str3) = %ld\n",strlen_my(str3));
    printf("strlen_my(str4) = %ld\n",strlen_my(str4));
    return 0;
}

运行结果