首页 > 学院 > 开发设计 > 正文

[C语言]strlen与sizeof的区别与联系

2019-11-08 03:21:57
字体:
来源:转载
供稿:网友

strlen

原型:size_t strlen( const char *string );   strlenC语言中的一个函数,用于计算字符串的(unsigned int型)长度,不包括’/0’在内。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始遍历,直到碰到第一个字符串结束符’/0’为止,然后返回计数器值。    sizeof sizeof是关键字不是函数,sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。

两者之间的区别与联系:   1.sizeof是操作符(关键字),strlen是函数。   2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”/0”结尾的。   sizeof还可以用函数做参数,比如:

short f()  PRintf("%d/n",sizeof(f()));//输出的结果是sizeof(short),即2。

3.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 4.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而sizeof在程序编译的过程中已经计算出来了。

下面我们来看一些有关数组与指针运算的例子:

int a[4]={1,2,3,4};printf("%d/n",sizeof(a)); //16,数组名单独放在sizeof中代表整个数组大小printf("%d/n",sizeof(a+0); //4,a代表数组首元素的地址printf("%d/n",sizeof(*a));//4,*a代表首元素printf("%d/n",sizeof(a+1));//4,a+1代表第二个元素地址printf("%d/n",sizeof(a[1]));//4,代表第二个元素printf("%d/n",sizeof(&a)); //4,数组的地址,地址的大小在32位平台为4printf("%d/n",sizeof(&a+1));//4,地址的大小printf("%d/n",sizeof(&a[0]));//4,首元素地址的大小printf("%d/n",sizeof(&a[0]+1));//4,第二个元素的地址printf("%d/n",sizeof(*&a));//16,整个数组大小char a[]={'a','b','c','d','e','f'};printf("%d/n",sizeof(a)); //6数组名单独放在sizeof中代表整个数组大小printf("%d/n",sizeof(a+0));//4,a代表数组首元素的地址printf("%d/n",sizeof(*a));//1,*a代表首元素printf("%d/n",sizeof(a[1]));//1,代表第二个元素printf("%d/n",sizeof(&a)); //4,数组的地址,地址的大小在32位平台为4printf("%d/n",sizeof(&a+1));//4,地址的大小printf("%d/n",sizeof(&a[0]+1));//4,第二个元素的地址 printf("%d/n", strlen(a)); //随机值 printf("%d/n", strlen(a + 0)); //随机值 printf("%d/n", strlen(*a)); //崩溃 printf("%d/n", strlen(a[1])); //崩溃 printf("%d/n", strlen(&a)); //随机值 printf("%d/n", strlen(&a + 1)); //随机值 printf("%d/n", strlen(&a[0] + 1)); //随机值char *a="abcdef";printf("%d/n",sizeof(a)); //4printf("%d/n",sizeof(a+0));//4printf("%d/n",sizeof(*a));//1,printf("%d/n",sizeof(a[1]));//1,printf("%d/n",sizeof(&a)); //4,printf("%d/n",sizeof(&a+1));//4printf("%d/n",sizeof(&a[0]+1));//4 printf("%d/n", strlen(a)); //6 printf("%d/n", strlen(a + 0)); //6 printf("%d/n", strlen(*a)); //崩溃 printf("%d/n", strlen(a[1])); //崩溃 printf("%d/n", strlen(&a)); //随机值 printf("%d/n", strlen(&a + 1)); //随机值 printf("%d/n", strlen(&a[0] + 1)); //随机值
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表