C语言中sizeof和strlen函式区别在哪?

如题所述

第1个回答  2022-11-04

C语言中sizeof和strlen函式区别在哪?

一、sizeof
sizeof(...)是运算子,在标头档案中typedef为unsigned int,其值在编译时即计算好了,引数可以是阵列、指标、型别、物件、函式等。
它的功能是:获得保证能容纳实现所建立的最大物件的位元组大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的记忆体空间的大小。实际上,用sizeof来返回型别以及静态分配的物件、结构或阵列所占的空间,返回值跟物件、结构、阵列所储存的内容没有关系。
具体而言,当引数分别如下时,sizeof返回的值表示的含义如下:
阵列——编译时分配的阵列空间大小;
指标——储存该指标所用的空间大小(储存该指标的地址的长度,是长整型,应该为4);
型别——该型别所占的空间大小;
物件——物件的实际占用空间大小;
函式——函式的返回型别所占的空间大小。函式的返回型别不能是void。
二、strlen
strlen(...)是函式,要在执行时才能计算。引数必须是字元型指标(char*)。当阵列名作为引数传入时,实际上阵列就退化成指标了。
它的功能是:返回字串的长度。该字串可能是自己定义的,也可能是记忆体中随机的,该函式实际完成的功能是从代表该字串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL;
1.sizeof操作符的结果型别是size_t,它在标头档案中typedef为unsigned int型别。
该型别保证能容纳实现所建立的最大物件的位元组大小。
2.sizeof是算符,strlen是函式。
3.sizeof可以用型别做引数,strlen只能用char*做引数,且必须是以''\0''结尾的。
sizeof还可以用函式做引数,比如:
short f();
printf("%d\n", sizeof(f()));
输出的结果是sizeof(short),即2。
4.阵列做sizeof的引数不退化,传递给strlen就退化为指标了。
5.大部分编译程式 在编译的时候就把sizeof计算过了 是型别或是变数的长度这就是sizeof(x)可以用来定义阵列维数的原因
char str[20]="0123456789";
int a=strlen(str); a=10;
int b=sizeof(str); 而b=20;
6.strlen的结果要在执行的时候才能计算出来,时用来计算字串的长度,不是型别占记忆体的大小。
7.sizeof后如果是型别必须加括弧,如果是变数名可以不加括弧。这是因为sizeof是个操作符不是个函式。
8.当适用了于一个结构型别时或变数, sizeof 返回实际的大小,
当适用一静态地空间阵列, sizeof 归还全部阵列的尺寸。
sizeof 操作符不能返回动态地被分派了的阵列或外部的阵列的尺寸
9.阵列作为引数传给函式时传的是指标而不是阵列,传递的是阵列的首地址,
如:
fun(char [8])
fun(char [])
都等价于 fun(char *)
在C++里引数传递阵列永远都是传递指向阵列首元素的指标,编译器不知道阵列的大小
如果想在函式内知道阵列的大小, 需要这样做:
进入函式后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged char *p1, int len)
{
unsigned char* buf = new unsigned char[len+1]
memcpy(buf, p1, len);
}

C语言中关于sizeof 和 strlen的区别分析

sizeof获得是所占的位元组数,所分配的空间的位元组数。
strlen获得是长度(实际字元的个数)。
例如: char a[5]="abc";
sizeof(a) 等于5,因为分配了5个位元组的空间。
而strlen(a)等于3,这是其实际字元的个数

c语言中lei与lei区别在哪?

你题目两个都是lei
没有区别的。
完全相同。

c语言中的sizeof和strenl的区别

sizeof 是占用实际空间的大小。 这个对一个变数来说 是固定不变的。
strlen 仅可以用在字串上,是统计到结束符\0的长度。
一般情况下 strlen必然会比sizeof小。不过 这个也不是绝对的。

C语言中 memcmp 和 strcmp 函式有哪些区别

1、cmp 是 pare,比较的缩写。
2、strcmp是C语言中标头档案<string.h>(字串函式)中定义的一个用于对两组字串进行比较的函式,它的返回值是int型别。
假设有两组字串cs和ct,当cs<ct时,函式返回一个负数;当cs==ct时,函式返回0;当cs>ct时,函式返回一个正数。
即:两个字串自左向右逐个字元相比(按ASCII值大小相比较),直到出现不同的字元或遇'\0'为止。如:"A"<"B" ,"a">"A" ,"puter">"pare" ,"put">"p"
strcmp函式原型为:int strcmp(const char *s1,const char * s2);

C语言中的sizeof和length怎么区别?

sizeof可以计算一个型别乃至一个结构的大小空间
length只是针对字串而言的
而且标准c里没有length这个函式
只有在C++中的string类中才有length这个函式

求C语言中strlen()函式的原始码

unsigned int strlen(const char *s)
{
int len = 0;
while(*s++)
len++;
return len;
}

请问c语言中malloc函式和realloc的区别

1.malloc(n*sizeof(int)) /* 请求n个连续的、每个长度为整型的空间,若成功返回这些空间的首地址,失败返回0 */
2.realloc(p,sizeof(int)*n) /* 给一个已经分配了地址的指标重新分配空间,引数p为原有的空间地址*/

c语言中,void在函式括号内和在函式前面的区别.

void在函式括号内:该函式的引数为空,或者说该函式不带引数
void在函式前面:该函式返回值为空

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网