【c语言学习笔记】sizeof和strlen的区别和分析,详细易懂

sizeof的功能是计算一个数据类型的大小,这个类型可以是数组、函数、指针、对象等,单位为字节,它的返回值是size_t类型,也就是unsigned int类型,是一个无符号整数。注意:sizeof不是一个函数,它是一个运算符,所以它不需要包含任何头文件。

strlen的功能是计算一个指定字符串的长度,函数原型是size_t strlen(const char *s),它的返回值是size_t类型,也就是unsigned int类型,返回的是字符串的长度,需要包含头文件#inlude <string.h>,参数s是字符串首地址。

区别:1、sizeof会将空字符\0计算在内,而strlen不会将空字符\0计算在内;

           2、sizeof会计算到字符串最后一个空字符\0并结束,而strlen如果遇到第一个空字符\0的话就会停止并计算遇到的第一个                     空字符\0前面的长度。

举例:

int main(void)
{
        char str[100] = "abcde";
        printf("sizeof(str) = %lu\n", sizeof(str));     //字节大小为100

        char str1[] = "abcde";
        printf("sizeof(str1) = %lu\n", sizeof(str1));   //字节大小为6

        char str2[] = "\0abcde";
        printf("sizeof(str2) = %lu\n", sizeof(str2));   //字节大小为7

        char str3[] = "\0ab\0c de";
        printf("sizeof(str3) = %lu\n", sizeof(str3));   //字节大小为9

        char str4[] = "abcde";
        printf("strlen(str4) = %lu\n", strlen(str4));   //字符串长度为5

        char str5[100] = "abcde";
        printf("strlen(str5) = %lu\n", strlen(str5));   //字符串长度为5

        char str6[] = "\0abcde";
        printf("strlen(str6) = %lu\n", strlen(str6));   //字符串长度为0

        char str7[] = "ab cde";
        printf("strlen(str7) = %lu\n", strlen(str7));   //字符串长度为6

        return 0;
}

分析:

1、str[100]计算字节大小时如果数组里面有明确数组元素个数的话,就会将元素个数*char型字节计算总的字节大小,也就是(100*1)Byte.

2、str1[]如果没有确定元素个数的话,就会计算字符串常量的字节大小,直至遇到的最后一个空字符\0,计算的也就是“abcde\0”,也就是(6*1)Byte.        

3、str2[]计算的是“\0abcde\0”字节大小,也就是(7*1)Byte.

4、str3[]计算的是“\0ab\0c de\0”字节大小,也就是(9*1)Byte.

5、str4[]计算的是“abcde”字符串长度,也就是5.

6、str5[100]不会根据元素个数进行计算,而是根据字符串常量“abcde”计算字符串长度,也就是5.

7、str6[]计算的是“\0”字符串长度,而且strlen只会读到遇到的第一个空字符\0前面的字符串长度,所以为0.

8、str7[]计算的是“ab cde”字符串长度,空格也会被读进去,也就是6.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值