anyuan2002.com - vwin网

查找: 您的方位主页 > 网络频道 > 阅览资讯:怎样运用sizeof与strlen?

怎样运用sizeof与strlen?

2016-09-07 13:22:53 来历:www.anyuan2002.com 【

怎样运用sizeof与strlen?

今天在进行一个多线程文件传输的时分,在考虑到收发数据包的组成与拆包时,总是发现收发包会呈现过错,导致收发报的失利。后来通过仔细检查,原来是sizeof与strlen用法呈现了过错,通过查找,我把材料拿出来和咱们一同共享。


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);
}

咱们能常在用到 sizeof 和 strlen 的时分,通常是核算字符串数组的长度
看了上面的具体解说,发现两者的运用仍是有差异的,从这个比如能够看得很清楚:

char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 核算字符串的长度,以完毕符 0x00 为字符串完毕。
int b=sizeof(str); //而b=20; >>>> sizeof 核算的则是分配的数组 str[20] 所占的内存空间的巨细,不受里边存储的内容改动。

上面是对静态数组处理的成果,假如是对指针,成果就不相同了

char* ss = "0123456789";
sizeof(ss) 成果 4 ===》ss是指向字符串常量的字符指针,sizeof 取得的是一个指针的之所占的空间,应该是

长整型的,所以是4
sizeof(*ss) 成果 1 ===》*ss是榜首个字符 其实便是取得了字符串的榜首位'0' 所占的内存空间,是char类

型的,占了 1 位

strlen(ss)= 10 >>>> 假如要取得这个字符串的长度,则一定要运用 strlen

 

本文地址:http://www.anyuan2002.com/a/question/73679.html
vwin娱乐场
Tags: 关于 strlen sizeof
修改:vwin网
关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部