sizeof

sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。
程序:

#include <stdio.h>int main(void)
{int a=8;int b = sizeof(a);//printf("a占用字节=%u\n",sizeof(a));printf("a占用字节=%d\n",b);return 0;
}

反汇编:

5:        int a=8;
00401028 C7 45 FC 08 00 00 00 mov         dword ptr [ebp-4],8
6:        int b = sizeof(a);
0040102F C7 45 F8 04 00 00 00 mov         dword ptr [ebp-8],4
7:        //printf("a占用字节=%u\n",sizeof(a));
8:        printf("a占用字节=%d\n",b);
00401036 8B 45 F8             mov         eax,dword ptr [ebp-8]
00401039 50                   push        eax
0040103A 68 1C 20 42 00       push        offset string "a\xd5\xbc\xd3\xc3\xd7\xd6\xbd\xda=%d\n" (0042201c)
0040103F E8 2C 00 00 00       call        printf (00401070)
00401044 83 C4 08             add         esp,8

我们看int b = sizeof(a);的反汇编:

0040102F C7 45 F8 04 00 00 00 mov         dword ptr [ebp-8],4

直接就将4传过来了,所以sizeof不是一个函数,只是一个运算符,是计算一个变量所占用内存的字节数

strlen函数

strlen()函数给出字符串中的字符长度。使用strlen函数,必须包含string.h库

程序:

#include <stdio.h>
#include <string.h>  /* 提供strlen()函数的原型 */
int main(void)
{char str[40]="hello d1l1endh";int len=strlen(str);printf("len=%d\n",len);return 0;}

hello d1l1endh的长度是14,注意strlen计算的不是str数组所占用的空间的大小(不是40)

反汇编看一下:

6:        int len=strlen(str);
0040D752 8D 55 D8             lea         edx,[ebp-28h]
0040D755 52                   push        edx
0040D756 E8 85 8F FF FF       call        strlen (004066e0)
0040D75B 83 C4 04             add         esp,4
0040D75E 89 45 D4             mov         dword ptr [ebp-2Ch],eax
7:        printf("len=%d\n",len);
0040D761 8B 45 D4             mov         eax,dword ptr [ebp-2Ch]
0040D764 50                   push        eax
0040D765 68 1C 20 42 00       push        offset string "a\xd5\xbc\xd3\xc3\xd7\xd6\xbd\xda=%d\n" (0042201c)
0040D76A E8 01 39 FF FF       call        printf (00401070)
0040D76F 83 C4 08             add         esp,8
8:        return 0;
0040D772 33 C0                xor         eax,eax
9:
10:   }

[ebp-28h]`是str的首地址,把str的首地址压入栈中,然后调用strlen函数

我们知道字符串是以\0为结尾的,strlen的工作原理是当读取\0时,将不再计算长度,返回长度。

#include <stdio.h>
#include <string.h>  /* 提供strlen()函数的原型 */
int main(void)
{char str[40]="hello d1l1endh\0abcdesf";int len=strlen(str);printf("len=%d\n",len);return 0;}

上面的程序在h后面加上了\0,结果依然为14

C和汇编---sizeof运算符和strlen函数相关推荐

  1. python sizeof函数_sizeof运算符和strlen函数 ZeroMemory函数和memset函数

    strlen和sizeof 在之前一直把两个东西在某种意义上混淆了,对它们的功能不是很熟悉. 在逛了下谷歌之后,发现自己误解的东西很多. strlen与sizeof的区别 1.sizeof操作符的结果 ...

  2. C语言中,strlen()函数与sizeof()运算符的区别以及用法区别

    C语言编程中,会频繁地对数据进行操作. 其中为了防止内存的非法占用,判断数据的长度或者变量的大小是非常有必要的操作. 最常用的就是strlen()函数或者sizeof()运算符. 那么strlen() ...

  3. C语言 sizeof 和 strlen 函数区别 - C语言零基础入门教程

    目录 一.sizeof 函数与 strlen 函数区别 1.获取字符串长度 – 针对字符串 2.获取指针/数组长度 – 针对指针/数组 3.sizeof 获取内存大小 4.经典案例 二.猜你喜欢 零基 ...

  4. c语言中strlen用到的头文件,C语言中sizeof()与strlen()函数的使用入门及对比

    sizeof()函数1,是什么? sizeof其实就是一个运算符,和那些+,-一样的东西,在程序编译的时候进行解析转换.虽然我们经常见到sizeof后面跟着个小括号,长得和函数差不多,但它和函数完全是 ...

  5. C语言学习笔记---strlen()函数和sizeof()函数

      strlen() 函数和 sizeof() 函数通常都可以用来计算数组或者字符串的长度.在使用的时候很容易混淆.下面就通过几个简单的示例来看一看这两个函数的具体差别. int main() {ch ...

  6. 如何求C语言字符串长度(strlen函数和sizeof关键字)

    如何求C语言字符串长度(strlen函数和sizeof关键字) 在程序里,一般会用***strlen()***函数或***sizeof()***来获取一个字符串的长度,但这2种方法获取的字符串的长度其 ...

  7. C语言strlen函数与sizeof函数的区别

    strlen函数与sizeof函数的区别 strlen函数和sizeof函数都可以用于获取字符串的长度,但是它们有几个重要的区别. strlen函数返回字符串的长度,而sizeof函数返回的是整个数组 ...

  8. 字符与字符串中的‘\0‘, ‘0‘, 0;strlen()函数求字符串长度计算方法(sizeof()验证)

    先问一个问题:如下字符串or字符数组,用strlen函数求长度各是多少? /*01*/char * str1 = "abc"; /*02*/char * str2 = " ...

  9. python sizeof函数_C++ sizeof 运算符 | 菜鸟教程

    C++ sizeof 运算符 sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小. sizeof 运算符可用于获取类.结构.共用体和其他用户自定义数据类型的大小. 使用 ...

最新文章

  1. 【错误记录】GitHub 提交报错 ( OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 )
  2. boost::math模块使用指定宽度的浮点 typedef估中等复杂的数学函数的测试程序
  3. mysql数据迁移 脚本_PHP将数据从Oracle向Mysql数据迁移实例
  4. Google图片搜索的原理
  5. 第三十三讲:tapestry表单组件详解之Label
  6. leetcode 153. 寻找旋转排序数组中的最小值(二分查找)
  7. Windows 10原创知识题(第三版)
  8. iozone联机测试
  9. Simulink步长选择
  10. 【论文笔记】EagerMOT:3D Multi-Object Tracking via Sensor Fusion
  11. C语言每日一练——第85天:三色球问题
  12. 数字8(eight )题解
  13. mysql连接错误state 08S01
  14. 电脑耳机电流声的消除2021-09-11
  15. 2022湖北省各市专精特新小巨人企业认定补贴、条件流程
  16. 吞下西甲英超中超成体育大胃王,PPTV还有哪些大招?
  17. 【STM32利用CuBe MX生成HID设备】2-给游戏控制器添加X\Y轴
  18. qq自由幻想系统不能提供服务器,《QQ自由幻想》角色转服常见问题集锦(上)...
  19. Elasticsearch7.6.2 rpm集群部署及异常处理
  20. Python qrcode制作二维码

热门文章

  1. ant-design官网打不开 , 需要用镜像地址打开
  2. 关于移动端页面强制竖屏
  3. css实现div内一段文本的两端对齐
  4. vue2.0 element-ui中的el-select选择器无法显示选中的内容
  5. 分享轮子-flutter下拉刷新上拉加载
  6. iOS中Safari浏览器select下拉列表文字太长被截断的处理方法
  7. HTMLCSS 问题
  8. vue打包后,font格式错误
  9. MyEclipse - 查询使用的JDK版本
  10. 题解 P2598 【[ZJOI2009]狼和羊的故事】