欧美只做les 网站,住建城乡建设部网站,杭州网站制作哪家好,做网站要买什么类型云空间本文是自己结合平时所学的知识#xff0c;对sizeof和strlen的区别进行了总结#xff0c;如有不对的地方还请批评指证#xff0c;共同进步#xff01;#xff01;#xff01; 一、从C语言的定义上来讲 1、sizeof是关键字#xff0c;而strlen是包含在string.h头文件中的一… 本文是自己结合平时所学的知识对sizeof和strlen的区别进行了总结如有不对的地方还请批评指证共同进步 一、从C语言的定义上来讲 1、sizeof是关键字而strlen是包含在string.h头文件中的一个字符串函数 2.sizeof操作符的结果类型是size_t它在头文件中的typedef为unsigned int 类型该类型保证能容纳实现所建立的最大对象的字节大小。 而string函数的返回类型是整形返回的是字符串的起始到第一个‘NUL’的所占字节的个数 3.sizeof可以用类型做参数strlen只能用char*做参数且必须是以”\0”结尾的。 4.大部分编译程序在编译的时候就把sizeof计算过了所以sizeof的值是常量不能出现在表达式的左边是类型或是变量的长度这就是sizeof(x)可以用来定义数组位数的原因。 二、从功能上来讲 1.strlen的结果要在运行的时候才能计算出来用来计算字符串的长度而不是类型占内存的大小。 2.sizeof后如果是类型必须加括号如果是变量名可以不加括号。这是因为sizeof是个操作符而不是函数。 3.当使用一个结构类型或变量时sizeof返回实际的大小。当使用一静态的空间数组时sizeof返回全部数组的尺寸。 Sizeof操作符不能返回被动态分配的数组或外部的数组的尺寸。 4.sizeof操作符不能用于函数类型不完全类型或位字段。 不完全类型指具有未知存储大小数据的数据类型如未知存储大小的数组类型未知内容的结构或联合类型void类型等。 三、从它们的实现上来讲自己推导的估计是这样如有错误请批评指正 strlen是遇到0退出注意0和 0 不同涉及NUL的解释请看下面关于的NUL的解释 而sizeof则是考虑数组的实际所占的存储空间在程序编译期已被确定下来了 易错点及误区 很多人都会有个潜意识对同一数组操作strlen的返回值肯定比sizeof的返回值小1很显然这是错的请看下面的例子具体的解释看程序分析 附源码 #include stdio.h
#include string.hint main()
{char a[]{0,1,2,0,3};printf(the size is :%d\n,sizeof(a));printf(the size is :%d\n,strlen(a));return 0;
}程序的运行结果 NUl的定义 C语言中规定以字符‘\0作为字符串结束标志。’\0是一个ASCII码为0的字符从ASCII码表中可以看到ASCII码为0的字符是“空操作字符” 它不引起任何控制动作也不是一个可显示的字符 对于程序的分析 strlen是遇到0及NUL退出上面的程序中strlen函数在遇到0时及数组中第四个元素时即退出了故而返回的是值3 而sizeof则是考虑数组的实际所占的存储空间在编译器编译期间已经定下来了数组的实际的所占的存储的空间是5个字节故而程序打印出5 转载于:https://www.cnblogs.com/linuxhan/archive/2012/12/09/3017177.html