sizeof和strlen区别

  • sizeof是关键字,在编译时就能计算出值,可以计算任何类型
  • strlen是函数,只有在运行时才能去计算,且只能计算字符型的.

对于数组时,strlen是判断’\0’为标志结尾的,而sizeof则计算的是数组整个空间
示例如下:

char buf1[]="abcde";
char buf2[]="ABC";
printf("buf1: %d %d\n",sizeof(buf1),strlen(buf1));
printf("buf2: %d %d\n",sizeof(buf2),strlen(buf2));

打印如下:

可以看到当我们的buf1没有指定长度时,sizeof打印的是6,这是因为它把’\0’也包含进去了.

sizeof还可以计算类型大小,一般对于32位C程序而言,对应的long则为4字节
如下图所示:

示例:

printf("char: %d\n",sizeof(char));
printf("short: %d\n",sizeof(short));
printf("int: %d\n",sizeof(int));
printf("long: %d\n",sizeof(long));
printf("long long: %d\n",sizeof(long long));
printf("float: %d\n",sizeof(float));
printf("double: %d\n",sizeof(double));

打印如下:

sizeof计算结构体大小
计算机为了加快取读结构体的内容速度,所以会对结构体进行字节对齐.
字节对齐的规律就是:结构体大小必须是最大成员的倍数(方便寻址)
示例1:

struct TestA{
  short a;
  long b; //b=4, a=1,而5%4=1,所以会在a上面补齐3字节,所以s1=8
};
struct TestB{
  char c;
  TestA d;
  int f; //c=1,d=8,f=4,而1+8+4=13,13%8=5,还差3字节,所以会在c上面补齐3字节, s2=16
};
int main()
{
  printf("%d\n",sizeof(TestA));
  printf("%d\n",sizeof(TestB));
}

打印如下:

示例2:

struct TestA {
  short a;
  long b; //s1=8,之前已经分析过
};
struct TestB{
  char c;
  TestA d;
  long long f; //c=1,s1=8,f=8,由于8最大,且17%8=1,所以会在c上面补齐7字节,则s2=24
};
int main()
{
  printf("%d\n",sizeof(TestA));
  printf("%d\n",sizeof(TestB));
}

打印如下:

C-sizeof和strlen区别,以及sizeof如何计算结构体大小的更多相关文章

  1. sizeof 和 strlen 区别

    Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型. ...

  2. sizeof和strlen区别(转)

    char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int   ...

  3. C语言中sizeof与strlen区别

    本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...

  4. C语言各类型大小,结构体大小 sizeof(struct A)

    C语言类型大小总览 编译器pack指令 #pragma pack(n)——定义n字节对齐 C++固有类型的对齐取编译器对齐与自身大小中较小的一个 32位C++默认8字节对齐.gcc编译器默认4字节对齐 ...

  5. sizeof求结构体大小

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  6. sizeof和strlen()区别及用法

    //sizeof是以字节为单位计算变量或类型所占内存大小,它是属于C语言运算符系列:而strlen()是一个函数,是计算字符串长度(也是以字节为单位,但略有区别):比如: char array[] = ...

  7. sizeof和strlen()区别

    sizeof关键字和strlen()标准函数都可以用来测试字符串的长度,但是两者有很大的不同 sizeof只能在本函数内, 使用""和不指定长度的字符数组中才能测出字符串的真实长度 ...

  8. sizeof和strlen区别

    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等 数组:编译时分配的空间大小 指针:指针所占的空间, ...

  9. 我也介绍下sizeof与strlen的区别

    本节我也介绍下sizeof与strlen的区别,很简单,就几条: 1. sizeof是C++中的一个关键字,而strlen是C语言中的一个函数:2. sizeof求的是系统分配的内存总量,而strle ...

随机推荐

  1. java从pdf中提取文本

    一(单文件转换):下载pdfbox包,百度搜pdfbox.(fontbox-1.8.16.jar和pdfbox-app-1.8.16.jar) package pdf; import java.io. ...

  2. C++之几个最常

    1.同类对象间的数据共享——静态成员 静态数据成员声明静态数据成员要采用关键字static:类静态数据成员的定义和初始化定义:static 数据类型 成员名:初始化:数据类型 类名::静态数据成员名= ...

  3. 对JS闭包和函数作用域的问题的深入讨论,如何理解JS闭包和函数作用域链?

    首先先引用<JavaScript权威指南>里面的一句话来开始我的博客:函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的. 因此,就出现了如下的几串代码: ...

  4. Python学习笔记【Supervisor】:使用Supervisor监控Tornado进程

    Linux常见应用服务配置模式nginx和supervisor:采用主配置文件+项目配置文件 安装(如果使用pip安装注意看是否需要指定使用python2版本) 第一步:在Linux中使用apt-ge ...

  5. [Swift]LeetCode65. 有效数字 | Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  6. [Swift]LeetCode881. 救生艇 | Boats to Save People

    The i-th person has weight people[i], and each boat can carry a maximum weight of limit. Each boat c ...

  7. [Swift]LeetCode930. 和相同的二元子数组 | Binary Subarrays With Sum

    In an array A of 0s and 1s, how many non-empty subarrays have sum S? Example 1: Input: A = [1,0,1,0, ...

  8. zookeeper使用详解(命令、客户端、源码)

    1. zookeeper使用详解(命令.客户端.源码) 1.1. 前言   zookeeper我们常用来做分布式协调中间件,很多时候我们都接触不到它的原理和用法,我对他的了解也仅限于知道它可以做分布式 ...

  9. MySQL将utf8字符集改为utf8mb4

    前言 今天在查看tomcat日志时发现了一个错误:Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0 ...

  10. sklearn的kmeans测试

    由于需要海量的进行聚类,所以将 k-means 算法自我封装成一个方便利用的库,可以直接调用得到最优的 k值 和 中心点: #!/usr/bin/python3.4 # -*- coding: utf ...