sizeof和strlen

  1. sizeof是一个关键字而不是函数,求出传入的操作数所占的字节数;
    strlen是的一个库函数,求字符串长度;
  2. sizeof传入字符串时,要一直找到字符串末尾,包括\0在内;
    strlen遇到第一个\0为止,不算\0在内;
  3. sizeof可以计算各种类型的字节数:各种内置类型,指针等;
    strlen必须传入char*
  4. 二者都用于字符串时,容易混淆;毕竟只有sizeof可用于其他各种类型,而strlen只能用于字符串;
  5. 字符串由多种表示:
char* p = "lixu";  
char a [ ] = "lixu";  //末尾有\0
char b [ ] = {'l', 'i', 'x', 'u'}; //末尾没有\0
  • 例子:
		char str[100] = "abcde";
        printf("sizeof(str) = %lu\n", sizeof(str)); //字节大小为100,str[100]计算字节大小时如果数组里面有明确数组元素个数的话,就会将元素个数*char型字节计算总的字节大小,也就是(100*1)Byte.
        
        char str1[] = "abcde";
        printf("sizeof(str1) = %lu\n", sizeof(str1));   //字节大小为6,str1[]如果没有确定元素个数的话,就会计算字符串常量的字节大小,直至遇到的最后一个空字符\0,计算的也就是“abcde\0”,也就是(6*1)Byte.
 
        char str2[] = "\0abcde";
        printf("sizeof(str2) = %lu\n", sizeof(str2));   //字节大小为7,str2[]计算的是“\0abcde\0”字节大小,也就是(7*1)Byte.
 
        char str3[] = "\0ab\0c de";
        printf("sizeof(str3) = %lu\n", sizeof(str3));   //字节大小为9,str3[]计算的是“\0ab\0c de\0”字节大小,也就是(9*1)Byte.
 
        char str4[6] = "abcde";
        printf("strlen(str4) = %lu\n", strlen(str4));   //字符串长度为5,str4[]计算的是“abcde”字符串长度,也就是5.
 
        char str5[100] = "abcde";
        printf("strlen(str5) = %lu\n", strlen(str5));   //字符串长度为5,str5[100]不会根据元素个数进行计算,而是根据字符串常量“abcde”计算字符串长度,也就是5.
 
        char str6[] = "\0abcde";
        printf("strlen(str6) = %lu\n", strlen(str6));   //字符串长度为0,str6[]计算的是“\0”字符串长度,而且strlen只会读到遇到的第一个空字符\0前面的字符串长度,所以为0.
 
        char str7[] = "ab cde";
        printf("strlen(str7) = %lu\n", strlen(str7));   //字符串长度为6 ,str7[]计算的是“ab cde”字符串长度,空格也会被读进去,也就是6.
 
        //
        char *p = "hello";
		char arr1 []= "hello";
		char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
	
		printf("%d\n", sizeof( p));//结果8,因为指针变量的所占空间大小仅仅和操作系统位数有关32-4,64-8
		
		printf("%d\n", sizeof(arr1));//结果6,字符串默认以\0结尾,sizeof()包含\0的计算
		
		printf("%d\n", sizeof(arr2));//结果为5,因为为字符型表示,并不含有\0(仅仅字符串有\0)
		
		printf("%d\n", strlen( p));//结果为5,strlen求的是字符串的长度,不包含\0
		
		printf("%d\n", strlen(arr1));//结果为5,strlen求的是字符串的长度,不包含\0
		
		printf("%d\n", strlen(arr2));//因为字符型不包含\0,但字符串需要找到\0才可结束,所以在'o'之后继续向后读取直到找到\0,所以是一个随机值	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值