专栏名称: 开点工作室
计算机专业书籍编写、IT企业面试笔试试题分析、计算机教育培训、技术文章、工具资源、精选课程、热点资讯。
目录
相关文章推荐
程序员鱼皮  ·  看了我的简历指南,面试率翻倍 ·  18 小时前  
程序员鱼皮  ·  看了我的简历指南,面试率翻倍 ·  18 小时前  
程序员小灰  ·  利用这个AI自动化平台,我接住了泼天的流量! ·  4 天前  
OSC开源社区  ·  Go即将支持特定代码在主线程运行 ·  5 天前  
程序员小灰  ·  强烈建议尽快搞个软考证!(重大利好) ·  1 周前  
51好读  ›  专栏  ›  开点工作室

开点程序员面试必考题--strlen和sizeof的区别

开点工作室  · 公众号  · 程序员  · 2017-03-07 07:17

正文

戳上面的蓝字“开点工作室”关注我们哦 


strlen是C/C++的标准库函数,其功能是计算字符串长度。sizeof是单目运算符,其功能是计算运算对象(变量或数据类型)所占字节数。两者完全不同。


两者的主要区别如下:


1)sizeof是关键字,是单目运算符,有优先级。strlen是函数名,在使用时必须include相关的头文件string.h。


2)使用sizeof可以求各类变量或者数据类型所占用的字节数。而strlen只能求字符串的长度,要求的参数类型只能是char *,且其中保存的字符串必须是以串结束标记 '\0' 作为结尾。


3)当运算对象为字符数组时,例如,char str[100]="CHINA" *p=str;,sizeof( str )得到的是数组str的大小,结果为100;而strlen( str )返回的是数组str中保存的字符串的长度,结果为5。sizeof( p )得到的是指针变量p所占用的内存大小,结果为4;而strlen( p )返回的是指针p所指向的字符串的长度,结果为5。


4)strlen是在程序运行期间计算出来的。多数情况下,sizeof是在编译时计算完成的,但有时也需要在运行时通过计算才能得到。例如求动态数组占用的字节数。

5)当使用sizeof计算一个结构类型或变量占用的字节数时,返回的是实际占用内存的大小。当使用sizeof计算一个静态变量或数组时,可得到整个数组所占的大小。使用sizeof求动态数组的大小与编译器相关,有的编译器是不支持这一功能的。


运行下列程序。


#include

#include

int main()

{      inta, x, n;

        charstr[100]="CHINA", *p=str;

        x= sizeof a;  //sizeof求变量所占字节数,可以不用括号

        a= sizeof(int);  //用sizeof求类型所占字节数,必须用括号

        printf("sizeofx = %d\n", x );

        printf("sizeofint = %d\n", a );

        printf("sizeofstr = %d\n", sizeof str );  // 求字符数组大小

        printf("strlenstr = %d\n", strlen(str) );  //求字符串长度

        printf("sizeofp   = %d\n", sizeof p );  // 求指针变量p的大小

        printf("strlenp   = %d\n", strlen(p) );  // 求指针p所指字符串长度

        printf("Enter n:");

        scanf("%d", &n);

        int b[n]; 

     // 根据变量n的值,说明一个长度为n的动态数组

        printf("sizeofb   = %d\n", sizeof(b) );    

    // 求动态数组大小

        return0;

}


运行程序,输入100,运行结果如下。


sizeof x = 4

sizeof int =4

sizeof str =100

strlen str =5

sizeof p   = 4

strlen p   = 5

Enter n:100

sizeof b   = 400

《横扫offer---程序员招聘真题详解700题》,开点工作室著,清华大学出版社出版,天猫、京东等各大网上书店及实体书店均有发售。