在工作中常常使用strlen和sizeof 来求字符数组的长度,但是这两者有什么细微的不同的?
1:strlen()和sizeof()的定义:
1.strlen()包含在#include <string.h>头文件中,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
2.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
2:两者的区别:
1.sizeof是取字节运算符(关键字),strlen是函数。
2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。sizeof还可以用函数做参数。例子如下
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "string.h" 4 5 int function() 6 { 7 return 0; 8 } 9 10 int main() 11 { 12 printf("sizeof(function()):%d\n", sizeof(function()));//函数做sizeof()参数 13 system("pause"); 14 }
3.数组做sizeof的参数不退化,传递给strlen就退化为指针了。这句话的意思是当数组做strlen时,会发生数组退化现象,比如定义char buf[100]="121314";sizeof( buf) buf不会退化为char *类型的指针。而strlen(buf),buf会退化成char *类型的指针。
int main() { char b[100] = "1123456789"; printf("sizeof(b):%d\n", sizeof(b));//值为100 printf("strlen(b):%d\n", strlen(b));//值为字符串长度 system("pause"); return 0; }
int function(char b[])//先退化为指针,在调用sizeof 和 strlen。 strlen没有影响 { printf("sizeof(b):%d\n", sizeof(b));//值为4 printf("strlen(b):%d\n", strlen(b));//值为10 return 0; } int main() { char b[100] = "1123456789"; function(b); system("pause"); }
常用用法:sizeof()常常被使用来求解数组长度。 数组长度=sizeof(数组)/sizeof(数组单个元素)。