sizeof和strlen在c语言的区别

Python014

sizeof和strlen在c语言的区别,第1张

1、用法不同

sizeof可以用类型做参数。

strlen只能用char*做参数,且必须是以''\\0''结尾的。sizeof还可以用函数做参数,比如:

short f()

printf("%d\\n", sizeof(f()))

输出的结果是sizeof(short),即2。

2、功能不同

sizeof的功能能是,获得保证,能容纳实现所建立的最大对象的字节大小。

strlen的功能是返回字符串长度,该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

3、意思不同

sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。

strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。

strlen实际上是,从参数表示的地址往后找,找到第一个'\0',即串尾。然后计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。

char x[]={0xBC,0xDD,0xCA}中,实际上是定义了一个char型的数组,而由于x[0],即0xBC开始往后找,一直到0xCA,都没'\0',所以会继续往后。当然,实际上往后找到的是其他值。

改char x[]={0xBC,0xDD,0xCA,0x00}后,应该就是3了。

扩展资料:

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

函数原型

extern unsigned int strlen(char *s)

在Visual C++ 6.0或Dev-C++中,原型为

size_t strlen(const char *string)

,其中size_t实际上是unsigned int,在VC6.0或Dev-C++中可以看到这样的代码:

typedef unsigned int size_t

头文件:string.h或cstring

格式:strlen (字符数组名)

功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内

说明:返回s的长度,不包括结束符NULL。

参考资料:strlen-百度百科

区别如下:

1、指代上的区别

(1)sizeof:用来获取字符串长度的导引,是处理字符串的重要工具。

(2)strlen:做的是一个计数器。

2、用法上的区别

(1)sizeof:sizeof( type_name )// sizeof(type)在编译时有效,而不是在运行时有效。

(2)strlen:extern unsigned int strlen(char *s)返回s的长度,不包含终止符NULL。

规则上的区别

(1)sizeof:可用于任何变量名,类型名或常量值。 当用于变量名(不是数组名)或常量时,不需要括号。

(2)strlen:从内存的某个特定位置开始扫描(可以是字符串的开头,中间的某个位置,甚至是不确定的存储区域),直到第一个字符串结束字符'\ 0'为止 ,然后返回计数器值。