起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > sizeof是什么 strlen又该如何了解

sizeof是什么 strlen又该如何了解

时间:2018-08-13 13:16:26来源:编程网 作者:IT培训网 已有: 名学员访问该课程

  快捷搜索:strlensizeof

前言:本质上而言,sizeof是一个运算符,它用类型作为参数,而strlen只是C库提供的一个函数,他用来计算以’\0’结果的字符串的长度,即它的参数只能是char*。它们相同的地点就只是返回值,都是一个size_t类型的值。

从一维数组看sizeof和strlen,sizeof是什么,strlen又该如何了解?

前几天学习一维数组的赋值的时候遇到这样一个问题,程序如下:

char a[]="hello";

char b[5]={'h','e','l','l','o'};

char c[]={'h','e','l','l','o','\0'};

char *d="hello";

printf("%d,%d\n",sizeof(a),strlen(a));

printf("%d,%d\n",sizeof(b),strlen(b));

printf("%d,%d\n",sizeof(c),strlen(c));

printf("%d,%d\n",sizeof(d),strlen(d));

运行结果如下:

6,5

5,38

6,5

4,5

在分析结果之前,我们先来看下sizeof和strlen的区别。

本质上而言,sizeof是一个运算符,它用类型作为参数,而strlen只是C库提供的一个函数,他用来计算以’\0’结果的字符串的长度,即它的参数只能是char*。它们相同的地点就只是返回值,都是一个size_t类型的值。

其实还有其他不同的地方,我们来通过这个程序分析下。

1)分析第一行第二行,同样是给数组赋值了hello,为什么结果却不一样。

strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,而sizeof的结果是在编译的时候就计算过的,是类型或变量占内存的大小。Strlen是计算以’\0’结束的字符串的长度,故如果b的长度就不是我们所想的我们给它赋值的字符串的长度了。如果你对b进行了如下的赋值:char b[5]={'h','e','l',‘\0’,'l'};那么b的长度也只有3了。

2)sizeof是我们给字符串赋值时系统分配给数组所用空间的值。比较a和c,这个时候我们对它俩的赋值其实是一样的,b区别于c,内存给a、c分配的都是6个字节,而b只分配给5个字节。

3)分析第一行第四行,为什么同样给a、d赋值了一个字符串,用strlen求出的值相同而用sizeof求出的不一样?

原因就是:数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址。sizeof(d) 结果 4 ,这个时候,d是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4。而sizeof(a)中a表示的是分配的数组 a 所占的内存空间的大小,不受里面存储的内容改变。

所以通常当我们来计算字符串数组的长度,到底用到的是 sizeof 和 strlen ,是需要考虑的,应注意它们的区别。

文章出自:http://qh.itpxw.cn/peixun/software/201842405.html

文章标题:sizeof是什么 strlen又该如何了解



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容