sizeof 与 strlen()

本文详细介绍了sizeof和strlen函数的区别,通过实现自己的strlen函数并验证其正确性,同时解释了两者在处理字符串时的不同行为及注意事项。

sizeof

sizeof()不是一个函数,用来判断一个字符串或者表达式的长度等等。它的计算包括终止null字节的缓冲区长度。

 strlen()

strlen的不包含终止null字节的字符串长度。

下面我们来尝试去实现自己的strlen()函数:

int strlen( const char * s )
{
    char * prt = s;
    int len = 0;
    while( *prt++ )
        i++;

    return i;
}

 下面我们用一个简单的例子去验证一下:

#include <stdio.h>

int strlen( const char * );

int
main( void )
{
    char * s = "hello";
    printf("strlen(s) = %d\n", strlen(s));
    return 0;
}

int
strlen( const char * s )
{
    char * ptr = s;
    int len = 0;
    while( *ptr++ )
        i++;

    return i;
}

$ gcc -o strlen strlen.c
$ ./strlen
strlen(s) = 5

注意:上面实现的strlen函数没有考虑到NULL等问题,当在写程序的时候,应该具体考虑到边界问题等等,提高代码的质量。

差别:

使用strlen是一次函数的调用,然而对于sizeof而言,并非是一次函数调用,因为缓冲区去用已知字符串进行初始化,其长度是固定不变的了,所以sizeof在程序编译的时候就计算出了缓冲区的长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值