C语言之sizeof与strlen
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p1 = “abcde\0f”;
char a[] = “abcde\0f”;
printf("%2d",strlen(p1));
printf("%2d",sizeof(p1));
printf("%2d",strlen(a));
printf("%2d",sizeof(a));
char *p2 = a; printf("%2d",sizeof(*p2)); return 0;
}
上述代码输出结果:5,4,5,8, 1
本道题主要考察两个方面:一是strlen与sizeof的用法;二是指针与数组的部分区别。
strlen是字符串相关的库函数,它的作用是计算字符串的长度,当遇到‘\0’时停止计算,字符串长度不包含‘\0’字符。所以strlen§和strlen(a)的长度都是5.
sizeof是运算符而不是函数,用来获取括号()里面数据类型或者变量所占用的内存字节数。sizeof§计算指针变量p在内存中占的大小。在32位系统中,任何类型的指针通常都占4字节大小。sizeof(a)计算数组a占内存的大小,通过sizeof计算数组的大小时,其结果是数组定义时指定的大小或字符串常量的长度加1,故这里的sizeof(a)是8. sizeof(*p2), *p代表的是第一个元素a[0]的空间,空间大小为1.
strlen与sizeof的更多区别如下:
1、strlen函数的结果在运行的时候才能计算出来,是用来计算字符串的长度,不是计算占内存的大小。
2、sizeof操作符的结果类型是size_t(实质是int类型)。
3、sizeof可以用类型做参数,strlen只能用char * 做参数(字符串),且必须是以‘\0’结尾。sizeof还可以用函数来做参数(如sizeof(fuc()))。
4、sizeof后如果是类型必须加括号,如果是变量名可以不加括号。
5、数组做sizeof的参数时不退化(还表示的是数组),传递给strlen后退化为指针(指向数组的第一个元素)。
6、当用于一个结构类型或变量时,sizeof返回实际的大小。sizeof操作符不能返回动态地被分派了的数组或外部的数组的尺寸。(sizeof返回的是一个确定值,不能给一个不确定分配多少内存大小的数组)。
- C语言中的sizeof和strlen
- sizeof 和 strlen的一些区别(用C语言代码表示)
- c语言实现strcmp和strlen、sizeof
- C语言学习之sizeof和strlen对比
- C语言strlen函数和sizeof操作符
- C语言的sizeof和strlen
- strlen函数与sizeof的区别,C语言strlen与sizeof的区别详解
- C语言 sizeof和strlen之间的那些事 C/C++软件开发求职面试题 必备考点(一)
- C语言里strlen和sizeof的区别
- C语言之——strlen()与sizeof()
- C语言中sizeof与strlen区别
- C语言:内存地址分析 & sizeof和strlen用法总结
- c语言中:strlen和sizeof的区别和它们分别交换各自作用领域(\0问题)时的细微差别!!!...
- C语言 strlen 和sizeof 区分
- C语言学习知识点(一):sizeof与strlen
- C语言的sizeof和strlen
- C语言中strlen与sizeof的区别
- C语言常见知识1(sizeof 和strlen,typedef和#define)
- C语言中sizeof与strlen区别
- c语言中sizeof()和strlen()的区别