首页 > 编程知识 正文

malloc 头文件,linux头文件环境变量

时间:2023-05-05 05:38:58 阅读:11159 作者:3092

strlen和sizeof的区别

1.sizeof操作符的结果类型为size_t,头文件中的typedef为unsigned int类型。

此类型确保可以容纳实现已建立的最大对象的字节大小。

2.sizeof是运算符,strlen是函数。

3.sizeof可以用类型创建参数,strlen只能用char*创建参数,必须以“”“”结尾。

4 .序列生成sizeof的参数不退化,传递给strlen后退化为指针。

5 .大多数编译器在编译时计算了sizeof是类型还是变量的长度。 这就是sizeof(x )可以定义数组维的原因

char str[20]='0123456789 '; //str是编译时大小固定的数组

inta=strlen(str; //a=10; //strlen ()在执行中确定

intb=sizeof(str ); //然后b=20; //sizeof ) )在编译期确定

6.strlen的结果在运行时计算,用于计算字符串的实际长度,而不是类型占用内存的大小。

7.sizeof后必须加上括号(如果是类型),但变量名称可以不加括号。 这是因为sizeof是操作符,不是函数。

char c; sizeof c; //变量名可以不加括号

如果应用于某个结构类型或变量,则sizeof返回实际大小。

如果应用了静态空间数组,则sizeof返回所有数组的大小。

sizeof操作符不能返回动态分配的数组或外部数组的大小

9 .将数组作为参数传递给函数时,传递的是指针而不是数组,并传递数组的起始地址

例如:

fun(char(8) ) ) ) ) ) )。

fun(char[] ) )。

它们都等效于fun(char* )

在c中,参数传递数组总是指向数组开头元素的指针,编译器不知道数组的大小

如果想知道函数中数组的大小,则必须:

进入函数后用memcpy复制,长度由其他形式传递

统一编号* P1,int len (fun ) ) )。

{

unsigned char * buf=newunsignedchar [ len1]

memcpy(buf,p1,len );

}

经常使用sizeof和strlen时,通常计算字符串数组的长度

通过上面的详细说明,可以发现两者的使用还有区别,从这个例子可以看出:

har str[11]='0123456789 '; //请注意,此处的str大小大于或等于11。 请考虑包括“”。 否则编译器会报告错误

inta=strlen(str; //a=10; strlen计算字符串的长度,以结束符号0x00作为字符串结束。

intb=sizeof(str ); //然后b=11; sizeof计算分配的数组str[11]所占的存储器区域的大小,不取决于其中存储的内容。

以上是对静态数组的处理结果,对指针的处理结果不同

char* ss='0123456789 ';

sizeof(ss )结果4===) ss是指向字符串常数的字符指针,sizeof取得指针所占的空间,应该是长整数,所以为4

sizeof(ss )结果1===) ) ss是第一个字符,实际上是获取字符串的第一位'0'所占的内存空间。 在char类型中,如果要获取1位strlen(ss )=10个字符串的长度,请确保使用strlen

此外,要确定静态数组中可存储的元素数,请使用以下方法:

inta [3]={ 1,2,3 };

coutsizeofa/sizeof(typeid ) a[0].name );

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。