C语言中sizeof()与strlen()函数的使用入门及对比_C 语言

sizeof()重大聚会
1,是什么?
SiZeof有效地是独一容易搬运符,那些的,-俱的东西,基本编制顺序时解析替换。憎恨人们常常便笺独一插入成分后头的sieof。,一定巨大的与功用近似地使相等。,但它与功用完整特色。。
2,有什么耗费?
sizeof果真执意用于通知人们编辑者在为人家思索到录音或许一种录音典型的录音在仓库面积中开拓未填写的时,开拓的未填写的上胶料,以八位位组为单位。
3,怎地用?
sizeof(典型),或sieof(变量)都可以,您腰槽的是独一典型或变量的仓库面积。。当用于变量时,它不克不及是圆插入成分。,直系的 sizeof 变量,但我通常不运用它。……)。
4,当你运用它时,你葡萄汁在意什么?
(1)SIEZOF前往的雇用未填写的的上胶料是VaR的上胶料。,它何止仅是它所运用的未填写的。它类似地房屋面积和现实面积的动机。。类似地,当运用该机构时,在绝大多数境况下,麝香思索八位位组排成直线成绩。。
(2)不注意什么可用于认同域ME会员的仓库面积。这葡萄汁被胜过地懂。,因SIZEF以八位位组前往录音。,你索赔它较友好的巨大。,这找错误编辑者的去核。。类似地编辑者的课题是不许的。,纵然你说你但是8个,占独一八位位组,编辑者无兴趣你。
(3)SIZEOF前往的录音典型是未署名的 int。C中特色典型录音混合容易搬运的自动手枪替换,不时设想你不在意它,它可能性是个成绩。,人们可以参考书下面的顺序示例。。
(4)在意数字组明确和掌管V当做成某事离题。。通常境况下,人们不断地以为数字组明确和掌管变量差一点都是,但当你运用SIEZOF时,境况就大不俱了。,数字组的上胶料用SIZEOF前往数字组明确。,当掌管变量被容易搬运时,它们前往由,在32位机的境况下,普通是4位。。当数字组名用作重大聚会决定因素时,重大聚会内侧的,决定因素同样掌管。,因而不再前往数字组的上胶料。
5,窥测辨析
源码:

#include
 
int main()
{
    int iVal = 3;
    Primtf( size of type int is %d \n", sizeof(int));
    Primtf( size of iVal is %d\n", sizeof(iVal));
    Primtf( size of iVal is %d\n", sizeof iVal);
 
    if((iVal - sizeof(int)) < 0)
    {
        Primtf( return type is int\n");
    }
    else
    {
        Primtf( return type is unsigned int\n");
    }
 
    char chArrayCon[7];
    char *chp;
    chp = chArrayCon;
    Primtf( size of chArrayCon is %d, The size of chp is %d\n", sizeof(chArrayCon), sizeof(chp));
 
    int iArraySize = 3;
    char chArrayVar[iArraySize];
    Primtf( size of chArrayVar is %d\n", sizeof(chArrayVar));
    return 0;
}

运转招致:

The size of type int is 4 
The size of iVal is 4
The size of iVal is 4
The return type is unsigned int
The size of chArrayCon is 7, The size of chp is 4
The size of chArrayVar is 3

招致辨析:
密码的最初的切开次要是运用的复杂命令。。
其次切开论述了第三个在意事项。。按说,IVAL的值为3,4的缩减葡萄汁是-1。,不足0,输入葡萄汁是他 return type is int"。但鉴于int和un签字 有工作的容易搬运时期,默许变为未署名。 int,因而招致将是独一大的未署名。 int典型的数量,它大于0。。
密码的第三切开解说数字组明确的分别。,纵然将掌管变量导演数字组明确,编辑者依然可以区别离题。。

    是你这么说的嘛!账目中不注意独一是搁浅C99规范思索的。。因C99规范下有特别的境况,这执意无把握数字组的用法。。当运用SIZEOF用于不固定长度数字组明确时,前往同样全部数字组的上胶料。,像独一窥测做成某事月的第四日密码。但这找错误在编制阶段器械的。,它在顺序的运转时器械。。因在编制时,编辑者通常不赚得变量的值是什么。。(自然,我直系的委派3人。),懂起来可能性为难之处。,可以假设的iArraySize是经过scanf来购置物现实数值的,话说回来再次情况数字组。。就这种境况,进行不多,你可以把它作为战例来经营,或许但是疏忽它。……
6总结
实则,SIZEOF的功用是通知人们构造面积的上胶料。,葡萄汁纪念这点。,此变量典型如果为普通积分的录音,或机构,分配体,计数……纪念这以前,当人们再去想赚得sizeof对特色录音典型容易搬运前往的值终于是以此类推时辰,人们需求弄清楚录音典型需求耗费这么些地面未填写的。!

strlen()重大聚会
C库重大聚会 size_t strlen(const char STR) 计算字母串STR的一定巨大的,但它以前的男朋友或女朋友阻挠空刻。。

情况
以下是情况的strlen() 重大聚会。

size_t strlen(const char STR)

决定因素
str -- 这是要计算的字母串的一定巨大的。。

前往值
此重大聚会前往字母串的一定巨大的。。

状况
下面的状况显示运用strlen() 重大聚会。

#include 
#include 

int main ()
{
  char STR〔50〕
  int len;

  strcpy(str, "This is yiibai.com");

  len = strlen(str);
  用誊写版印刷机印刷一定巨大的 of |%s| is |%d|
", str, 莱恩)
  
  前往(0)
}

让人们编制并运转下面的顺序,这将招致以下招致:

Length of |This is yiibai.com| is |26|

sizeof与strlen的用法分别
1. SIZEOF运算符的招致典型是SIZEZT,它在头提供纸张中是无用符号代表的, int典型。该典型以誓言约束能帮忙了解所扩大的最大靶子的八位位组上胶料。

2. SIZEOF是容易搬运员(C) 关键词),strlen是重大聚会。

3. SIZEOF可以作为决定因素典型,strlen只能用char*做决定因素,麝香在0的末了。SIZEOF也可以用作决定因素的重大聚会。,譬如:

short f();
printf("%d\n", sizeof(f()));

输入的招致是前往值典型的上胶料。, 即sizeof(short)=2。

4. 独一数组的决定因素不不足简并,投递给strlen就退化为掌管了。绝大多数编辑者在编制时计算sieof。,是变量的典型或一定巨大的,这执意为什么SIZEOF(X)可以用来下定义数字组的维数。。

char STR〔20〕=0123456789
int a=strlen(str); //a=10;
int b=sizeof(str); //b=20;

而strlen的招致要在运转的时辰才干计算摆脱,用于计算字母串的一定巨大的。,找错误内存典型的上胶料。

5. 在SIZEOF以前,典型麝香是圆插入成分。,设想它是独一变量名,它不克不及是圆插入成分。。这是因SIZEOF是找错误独一重大聚会的运算符。。

6. 当适合于机构典型或变量时, sizeof 前往现实巨大,当适合定态未填写的数字组时, sizeof 获取全部数字组的上胶料。sizeof 运算符不克不及前往动态分配的数字组或内部的上胶料。。

7. 数字组作为掌管导演数字组,而找错误数字组。,数字组的第独一地址经过,如:

生趣(炭) [8])
生趣(炭) [])

都相当于 生趣(炭) *)。

在C 中,决定因素投递数字组不断地投递掌管到第独一元素。,编辑者不赚得数字组的上胶料。。设想您想赚得重大聚会中数字组的上胶料, 它需求这样的做:

进入重大聚会后,用MimcPy再版它,一定巨大的由其他的身材的决定因素投递。

fun(unsiged char *p1, int 莱恩)
{
 unsigned char* buf = new unsigned char[len+1]
  memcpy(buf, p1, 莱恩)
}

掌管的上胶料,招致是类似的典型。:

char* ss = "0123456789";
sizeof(ss)

招致是4 => SS是导演字母串持续的的刻掌管。,sizeof 获取掌管雇用的未填写的,它葡萄汁是独一长积分的。,因而是4。 sizeof(*ss) 招致 1, => SS是第独一刻,实则,它是弦的第独一0。 雇用内存未填写的,这是刻典型,1八位位组,strlen(ss)= 10 >>>> 设想你想腰槽这样字母串的一定巨大的,麝香运用 strlen.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

`