基本上适用于整个计划. Printf开始从堆栈中取出参数,在这种情况下,需要一个值得过多的int.这通常类似于返回地址.因此,当printf返回时,它将返回到堆栈上接下来的任何随机数.通常的结果 – 如果你很幸运 – 是一个分段错误.

因为它将参数压入堆栈,所以它会将它们弹出,所以它会尝试先获取int.

如果你不幸运,它会找到一个可寻址的代码块.这导致了第二种情况,其中地址成为随机字符散列的地址.现在它将尝试打印一个字符串,直到它找到一个随机的NUL字符.

更新

正如约阿希姆指出的那样,具体问题由调用约定决定,所以让我们做一个明确的例子.当要调用printf函数时,首先按下返回地址或最后按下它.我们假设它首先被推送(在通常的架构上更常见),所以这个调用需要PUSH返回地址,格式字符串的PUSH地址,PUSH是一个int值 – 让我们说42.这给了我们这个堆栈:

RTN ADDR

ADDR OF STRING

42

并使堆栈指针SP指向堆栈上的下一个位置.

现在printf开始解释字符串.它查找int参数的地址,并找出它的SP-1.所以string参数的地址必须是SP-2 …但这是格式字符串的地址,因为没有字符串参数.然后当它查找格式字符串的地址时,它想要找到SP-3,但这是返回地址,可执行代码的地址.在大多数任何机器上,这都应该导致分段错误.

如果你通过调用约定的其他选项,你会发现它们中的每一个看起来都是错误的,因为无论如何,printf认为它需要引用堆栈中的三个东西,而不是它有两个.

c语言中缺少参数怎么弄,printf参数不足相关推荐

  1. C语言中使用‘scanf’输入与‘printf’输出的几个例子

    C语言中使用'scanf'输入与'printf'输出格式及几个程序举例 初学者最常使用的就是键盘输入(scanf)和输出(printf) scanf的调用格式为: #include<stdio. ...

  2. 谈谈你对c语言中数据(各种常量,变量,函数参数,字符串)的存储认识,自考《高级语言程序设计》知识点总结(二)...

    2.1 C语言的数据类型 数据类型包含两方面的内容:数据的表示和对数据加工的操作.数据的全部可能表示构成数据类型的值的集合.数据全部合理的操作构成数据类型的操作集合. 在C语言中,把整型.实型和字符型 ...

  3. C语言中使用库函数解析命令行参数

    在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...

  4. c语言中的输入输出函数之printf函数

    文章目录 一.前言 二.printf函数 1.printf函数定义 2.格式 格式化字符串 1.字符串常量 2.格式控制字符串 a.类型 b.标志 c.最小宽度 d. .精度 e.类型长度 3.转义字 ...

  5. c语言中缺少link文件夹,c – Cmake找不到使用“link_directories”的库

    我是Ubuntu,我正在学习关于cmake和make,而只是尝试一个简单的例子.我有两个目录:src和build.在src中,我有两个文件:main.cpp和CMakeLists.txt,它有(仅)以 ...

  6. c语言中缺少函数标题,error C2332: “struct”: 缺少标记名

    环境:xp sp3,vs2008, 一段这样的代码 typedef struct TCP_KEEPALIVE { u_long onoff; u_long keepalivetime; u_long ...

  7. c语言中如何将字体弄大,CFree怎样调大字体

    CFree作为一款专业的编程工具,它可以帮助用户轻松解决解析输入的代码程序,小编了解到很多用户不知道怎样调大字体,如果你想要设置字体的方法,就赶快来看看下面的操作方法,相信只要你看完就会明白的! 操作 ...

  8. C语言中缺少link文件,如何在link文件中给某个C文件的bss分配单独的段?

    本帖最后由 成风 于 2020-4-13 21:49 编辑 一:全局变量只是静态变量的一种,但为了方便描述,下面用"全局变量"代替"静态变量". 二:不好意思, ...

  9. c语言中函数可以有几个参数,C中子函数最多有几个形参

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C89 31个,C99 127个. ANSI C89 2.2.4.1 Translation limits The implementation shal ...

最新文章

  1. 深入理解Nginx工作原理
  2. 关于服务器虚化的优势,服务器虚拟化优缺点总结
  3. 云端能力知几许?12人众测华为云企业级Kubernetes集群实力
  4. Cisco常见路由器密码和版本恢复方法
  5. c# 笔记 数据类型转换 数组 函数
  6. 根据中文修改英文翻译,重新生成英文翻译文件(保证原有文件的顺序不变)
  7. 大工13秋 c/c++语言程序设计 在线作业3,大工19秋《JavaScript基础教程与应用》在线作业3【满分答案】...
  8. SGU 210 Acdream 1227 Beloved Sons KM
  9. html5新的dom函数,从0到1: 实现一个虚拟 DOM(上)
  10. 2021-06-29初识JQuery
  11. 985高校硕导跳槽高中当老师,博士扎堆中小学,是内卷还是进步?
  12. RL(Chapter 4): Gambler’s Problem
  13. 异次元发卡网邮箱SMTP配置教程
  14. mac 设置阿里企业邮箱
  15. LM75AD温度传感器的应用(2)
  16. 《视觉SLAM进阶:从零开始手写VIO》(二)
  17. rabbitMQ guest账号登录总是提示失败
  18. Initialization failed for Block pool registering (Datanode Uuid unassigned)
  19. 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文
  20. Asp网站脚本漏洞的安全防范

热门文章

  1. 《游戏引擎浅入浅出》
  2. ubuntu安装wine时停在了“configuring ttf-mscorefonts-installer”怎么办
  3. Python爬虫实战使用scrapy与selenium来爬取数据
  4. Week8 作业 C - 班长竞选 SCC Kosaraju HDU - 3639
  5. 据说,证监会已承认证券交易所选址时没看好风水...
  6. 我的世界(18)-精英怪物(InfernalMobs插件)
  7. eclipse maven 搭建 SSM(Spring+SpringMVC+MyBatis)开发环境 和 MyBatis 自动生成的 maven 插件配置
  8. FBW7通过端粒脱帽介导肺纤维化和衰老
  9. android otg开发笔记
  10. LocalSend - 文件传输工具