企业面试题&&strlen与sizeof的区别

#include<stdio.h>

int main()

{

    char a[1000];

    int i;

    for(i = 0;i < 1000; i++)

    {

        a[i] = -1 - i;

    }

    printf("%d",strlen(a));

    return 0;


}

运行结果:255

解析:char 型变量占用1个字节8bit,范围为-128~127,-128 - 1 = 127,-128补码为1000 0000,-1补码为1111 1111,两者相加溢出得0111 1111,即为127,运行时a[127] = -128,a[128] = 127,a[129] = 126........ a[255] = 0,0的ASCII码是‘\0’,当strlen检测到\0时就停止,所以输出为255.这是默认为有符号情况下。


如果是无符号,范围为0~255,无符号情况下0-1=255,因为0的补码为0000 0000,-1的补码为1111 1111,加在一起为1111 1111,无符号情况下,1111 1111是255的补码,也是原码。所以a[0] = 0 - 1 = 255,a[1] = 254

......a[255] = 0,同理输出为255。


二、strlen与sizeof的区别

1、

char src[100] = "hello world";

使用strlen测量得11,sizeof测量得100.

2、

char src[] = "hello world";

strlen 11

sizeof 12 

sizeof测量的是占用内存所以字符串结尾的\0也要算进去。

3、

char *src = "hello world";

strlen 11

sizeof 4

因为指针占用内存恒为4.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值