C重温系列(3) ------ sizeof与strlen的区别

  • strlen()函数用于统计字符串长度,使用前应包含string.h头文件,其原型如下:

                           size_t strlen( char const *string );

       返回值类型为size_t,它是一个无符号整数类型,在头文件中typedef为unsigned int 类型,实现函数为:

size_t strlen( char const *string )
{
    int length;
    for( length = 0; *string++ != '\0'; )
        length += 1;
    return length;
}
  • sizeof()是运算符,并没有原函数,返回值对应一个对象或者类型所占的内存字节数,用法:

                         sizeof (类型说明符)

  • 比较:
 sizeofstrlen
返回值无符号整型无符号整型
参数类型说明符/函数(其返回值类型)字符串(数组)指针
性质运算符函数
返回值说明类型占内存大小字符串长度(不含结尾符)

 

  • 要点区分:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void size_str( char *test )
{
    //仅测量指针的大小,与cpu有关,32位:4byte  64位:8byte
    printf("sizeof %s = %d byte\n",test,sizeof(test)); 

    printf("strlen %s = %d byte\n",test,strlen(test));
}


int main()
{
    char *string1     = "ZRong1";
    char string2[30]  = "ZRong2";
    size_str(string1);
    size_str(string2);

    printf("sizeof %s in main = %d byte\n",string2,sizeof(string2));


    return 0;
}

       输出结果:

    

       比较有意思的是:数组名作为参数传递给size_str函数测出的字节大小为4,而在main函数中测出为30字节(通过sizeof)。应该注意到调用函数时实际传递的是一个指针,string2是一个数组,test是一个指向string2数组首元素的指针。所以,sizeof ZRong2 的值应该是字符指针的长度,而不是数组的长度。

      编译器同时也接受数组形式的函数形参,所以下面这两个函数声明是等价的

      void size_str( char *test );         <==>        void size_str( char test[] );

     (指针,类型sizeof长度可以参考 C重温学习(1) ------ 数据类型 的总结)

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值