C和指针之实现strlen函数

来源:互联网 发布:菜鸟网络上市 编辑:程序博客网 时间:2024/05/17 01:30

1、问题

求字符串长度,实现strlen函数。





2、代码实现

#include <stdio.h>#include <assert.h>int get_strlen(char *str){    assert(NULL != str);    return *str == '\0' ? 0 : (1 + get_strlen(++str));}int main(){    char *str = "chenyu";    char str1[10] = "chenyu";    char str2[10] = "chengongyu";    printf("str length is %d\n", get_strlen(str));    printf("str1 length is %d\n", get_strlen(str1));    printf("str2 length is %d\n", get_strlen(str2));}






3、结果分析和总结

1111deMacBook-Pro:dabian a1111$ vim get_strlen.c1111deMacBook-Pro:dabian a1111$ gcc -g get_strlen.c -o get_strlen1111deMacBook-Pro:dabian a1111$ ./get_strlenstr length is 6str1 length is 6str2 length is 16

这个函数用了递归遇到'\0'就停止了,strlen函数也一样,不信你试下字符数组里面包含'\0'这个字符试下,是不是只计算这个字符之前的数据大小,但是这里为什么str2的长度不是10呢?里我用strlen()函数测试结果也是一样,因为编译器会在末尾加上'\0',但是str2[9]已经占用了,所以编译器就不会加了, strlen会一直计算到下一个'\0',但是str2[9]之后是未知的,所以strlen()也是未知的,从这里我们也可以分析出,char *str = "***";末尾一定会有'\0',但是字符数组末尾不会有‘\0’,只不过在编译的时候,如果最后一个字符没有被占用,就会被编译器自动加上‘\0’,否则不会加上

原创粉丝点击