C语言里面获取字符串长度sizeof和strlen的区别

 

1、我们先来看一下这两者的概念。strlen是一个函数,求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从arr首地址一直找下去,直到遇到'\0'停止。 而sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。

2、分别用strlen和sizeof计算数组arr【10】的长度,看运行的结果。

int main()
{ 
     char arr[10];
     printf(" strlen(arr)=%d   sizeof(arr)=%d\n",strlen(arr),sizeof(arr));
     return 0;
}
运行结果如下:


你会发现,用strlen获取的结果是不定的 ,而sizeof()返回的是变量声明后所占的内存数,不是实际长度。

2、这一次我们对数组arr[10]进行部分的初始化,再来看结果。

int main()
{ 
     char arr[10]={'1','2','3'};
     printf(" strlen(arr)=%d   sizeof(arr)=%d\n",strlen(arr),sizeof(arr));
     return 0;
}


这一次strlen获取到是字符串的实际长度3。

3、我们来看一下指针,注意的是后面对字符串的某个值进行初始化后,strlen的结果是有变化的。

int main()
{ 
    char *t;
    t=(char *)malloc(sizeof(char)*10);
    printf("no1 strlen(t)=%d   sizeof(t)=%d   \n\n\n",strlen(t),sizeof(t));
    *(t+3)='\0';
    printf("no2 strlen(t)=%d   sizeof(t)=%d   \n",strlen(t),sizeof(t));return 0;
}
运行结果如下:

你会发现用sizeof是获取不到指针字符串的长度,返回的是4,t是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是 

长整型的,所以是4 。注意的是后面对字符串的某个值进行初始化后,strlen的结果是有变化的。

4、  最后来看一下char arr[10]="12345678";char *t="12345678";这样的定义结果会如何呢。

int main()
{ 
    char arr[10]="12345678";
    char *t="12345678";
    printf("no2 strlen(t)=%d   sizeof(t)=%d   \n",strlen(t),sizeof(t));
    printf(" strlen(arr)=%d   sizeof(arr)=%d\n",strlen(arr),sizeof(arr));
    return 0;
}
 

运行结果如下:

自己体会吧!




  • 23
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值