您的位置:首页 > 编程语言 > C语言/C++

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

2017-02-17 11:29 351 查看
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位平台为4
printf("%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位平台为4
printf("%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));  //4
printf("%d\n",sizeof(a+0));//4
printf("%d\n",sizeof(*a));//1,
printf("%d\n",sizeof(a[1]));//1,
printf("%d\n",sizeof(&a));  //4,
printf("%d\n",sizeof(&a+1));//4
printf("%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)); //随机值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息