C-sizeof和strlen区别,以及sizeof如何计算结构体大小
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如何计算结构体大小的更多相关文章
- sizeof 和 strlen 区别
Sizeof与Strlen的区别与联系 一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型. ...
- sizeof和strlen区别(转)
char str[20]="0123456789"; int a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int ...
- C语言中sizeof与strlen区别
本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...
- C语言各类型大小,结构体大小 sizeof(struct A)
C语言类型大小总览 编译器pack指令 #pragma pack(n)——定义n字节对齐 C++固有类型的对齐取编译器对齐与自身大小中较小的一个 32位C++默认8字节对齐.gcc编译器默认4字节对齐 ...
- 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 ...
- sizeof和strlen()区别及用法
//sizeof是以字节为单位计算变量或类型所占内存大小,它是属于C语言运算符系列:而strlen()是一个函数,是计算字符串长度(也是以字节为单位,但略有区别):比如: char array[] = ...
- sizeof和strlen()区别
sizeof关键字和strlen()标准函数都可以用来测试字符串的长度,但是两者有很大的不同 sizeof只能在本函数内, 使用""和不指定长度的字符数组中才能测出字符串的真实长度 ...
- sizeof和strlen区别
sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等 数组:编译时分配的空间大小 指针:指针所占的空间, ...
- 我也介绍下sizeof与strlen的区别
本节我也介绍下sizeof与strlen的区别,很简单,就几条: 1. sizeof是C++中的一个关键字,而strlen是C语言中的一个函数:2. sizeof求的是系统分配的内存总量,而strle ...
随机推荐
- 微信测试号开发入门配置问题java
这个测试号配置弄了好几天了,入了无数坑,终于解决了...辛苦我了,手动安慰一下自己.. 为了萌新们以后不要再浪费时间绕半天做无用功.看看楼楼的艰苦历程吧. 此教程针对没有云服务器,没有自己的域名的.没 ...
- 循环结构for
教程:高能:语句结构都是由关键字开头,用冒号结束! 一:语句结构 for <variable> in <sequence>: <statements>else ...
- Oracle:WITH AS () Merge ?
WITH AS 语法在SQL SERVER 和ORACLE数据库上均支持,主要用于子查询.语法如下: WITH expression_name [ ( column_name [,...n] ) ] ...
- Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
什么是ui-router ui-router是AngularUI库最有用的组件之一(AngularUI库由AngularJS社区构建).它是一个第三方路由框架,允许通过状态机制组织接口,而不是简单的U ...
- [Swift]LeetCode724. 寻找数组的中心索引 | Find Pivot Index
Given an array of integers nums, write a method that returns the "pivot" index of this arr ...
- [Swift]LeetCode911. 在线选举 | Online Election
In an election, the i-th vote was cast for persons[i] at time times[i]. Now, we would like to implem ...
- Android 普通通知栏新方法,现在需要创建通知渠道才可以
先看看效果看看是不是你想要的 点击后 话不多所,贴代码 xml文件: <?xml version="1.0" encoding="utf-8"?>& ...
- qt集成dsoframer.ocx打开office办公软件
最近一段时间真是事情太多了,前不久项目中一个嵌入office软件的问题,由于没有时间研究,且项目的需求是浏览word文档,偷了一个懒,把word文档转换成pdf文档,然后嵌入libcef浏览器给打开了 ...
- Android 解压zip文件(支持中文)
过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...
- Asp.Net SignalR 集群会遇到的问题
SignalR集群 当客户端数量上来,一台server自然是吃不消的.多个server集群部署是必然的解决方案.再通过负载均衡,嗯 简直是完美.但是问题也接踵而来.每个server只能管理到当前ser ...