《OrangeS一个操作系统的实现》中printf无法打印数字问题

news2024/11/19 4:43:14

【问题现象】

《OrangeS一个操作系统的实现》 第9章 a目录下的代码编译运行后,所有printf打印数字的地方都有问题,如下图:

 HD size 始终为 0MB。

【问题分析】

通过断点,发现printf第61行:

int printf(const char *fmt, ...) 函数中

va_list arg = (va_list)((char*)(&fmt) + 4);

并没有得到正确的va_list arg的地址。

通过单独用C语言gdb分析,发现arg进入变长函数后减少了292个字节

因此造成地址不正确。

【问题解决】

为什么会偏移292个字节,猜想应该是编译器干的,那么如果加上这292个字节,是不是问题就能得到解决?

亲自做试验:

在vsprintf.c文件中

PUBLIC int vsprintf(char *buf, const char *fmt, va_list args)函数中

第48行,修改为:

va_list    p_next_arg = args + 292;

再试验,正确的打印出了数字,问题解决了!!!

 如下图:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【历史上的今天】4 月 28 日:人工智能理论之父出生;大众点评上线;苹果开设 iTunes 音乐商店

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 4 月 28 日,在 1994 年的今天,美国克林顿政府公布了一项价值数百万美元的计划,以帮助那些制造平板显示屏的美国公司维持生计…

Filter详解

Filter是什么: Filter表示过滤器,是Java Web三大组件之一(Servlet、Filter、Listener)。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权…

chatgpt赋能python:PythonSearchDialog:利用Python编写高效的搜索对话框

Python Search Dialog:利用Python编写高效的搜索对话框 在当今数字时代,大多数产品都提供搜索功能。而Python Search Dialog 则为产品提供了一个强大、高效的搜索对话框,使得用户能够更快速地、更准确地定位所需信息。 什么是Python Search…

实验三:熟悉常用的HBase操作

实验环境: (1)操作系统:Linux(建议 Ubuntu 16.04 或 Ubuntu 18.04)。 (2)Hadoop 版本:3.1.3。 (3)HBase 版本:2.2.2。 (4)JDK 版本:1.8。 (5)Java IDE: Eclipse。 实验内容与完成情况: (1)现有以下关系数据…

【数据挖掘与商务智能决策】第十七章 神经网络

前言 本人CSDN博客为“仿生程序员会梦见电子羊吗”,本文基于markdown本文书写,平台及软件为CSDN与Typora,文中图片存储地址为CSDN,故部分图片可能带有“CSDN仿生程序员会梦见电子羊吗”的水印,属于本人原创&#xff0c…

视频理解学习笔记(二):I3D and Kinetics Dataset

视频理解学习笔记(二):I3D and Kinetics Dataset 视频理解的三个流派(怎么处理时序)论文概览Kinetics Dataset模型详解将2D卷积网络扩张到3D(Inflating 2D ConvNets into 3D)如何用预训练好的2D…

2023年最新企业网盘排行榜出炉

随着云计算技术的不断发展,企业日常工作中大量的资料、文档等信息需要实现集中管理,此时企业网盘工具就应运而生。企业网盘是一种可用于企业内部管理、团队协作及文件共享的云存储平台,能够极大提高企业办公效率和安全性。 一、企业网盘的帮助…

[链表OJ题 8] 用栈实现队列,没想到你小子的基础这么好,这么快就做对了

目录 题目来源: 代码实现: 思路分析: 实现过程: 题目来源: 力扣 - 232.用栈实现队列 题目描述: 代码实现: 我们这里的栈已经写好了,如果对栈还不是很懂的可以看看这篇文章&am…

Postman接口工具之请求运行顺序及Workflow

作为一款接口调试利器, Postman的更新迭代速度很快, 不断加入了很多新的功能.使的api设计,测试,监控, Mock,以及团队协作更加方便. 修改执行顺序 在遇到有接口依赖的情况, 我们往往需要接口按顺序执行, 之前可以通过在一个请求的Pre-request Scripts中使用pm.sendRequest发送…

java基于springboot应急科研科技资源管理系统

应急资源管理系统的开发,主要有管理员和用户两个角色。 管理员角色计划设计的功能有密码信息管理、个人信息管理、用户信息管理、应急资源管理、留言信息管理等模块,管理员可以对用户、应急资源、留言等信息进行管理,可以选择添加、修改、删除…

ADC常用的十大滤波算法(C语言)

目录 ​编辑 ​一、限幅滤波法 二、中位值滤波法 三、算术平均滤波法 四、递推平均滤波法 五、中位值平均滤波法 六、限幅平均滤波法 七、一阶滞后滤波法 八、加权递推平均滤波法 九、消抖滤波法 十、限幅消抖滤波法 ​一、限幅滤波法 1、方法: 根据经验…

系列1——geotools简介

geotools简介 官网 https://docs.geotools.org/latest/userguide/index.html 架构图 常用功能列表 ModulePurposegt-renderImplements of Java2D rendering engine to draw a mapgt-jdbcImplements for accessing spatial databasegt-mainImplements for accessing spatial…

搭建一个Fabric网络

生成相关证书文件 首先Fabric提供了一些工具用于生成所需的文件,cryptogen模块会根据提供的配置文件生成后续模块运行过程中需要的证书和数据文件。 cryptogen常用命令: generate用于根据配置文件生成证书。 showtemplate用于提供一个模板。 具体操作如…

ROS学习——rviz打开bag文件

一、首先可以在这个网站中下载.bag文件用于学习。 二、显示.bag文件信息 在终端1中启动&#xff1a; roscore 在终端2中输入&#xff1a; rosbag info <bag_file_name> 这里要把<bag_file_name>换成你自己的bag文件名字&#xff0c;之后在终端就会显示出bag文件…

Lidar AI Solution环境配置

目录 Lidar AI Solution环境配置前言1. Lidar AI Solution1.1 Pipeline overview1.2 GetStart 2. CUDA-BEVFusion2.1 3D目标检测(nuScenes验证集)2.2 演示2.3 模型和数据2.4 前置条件2.5 快速开始推理2.5.1 下载模型和数据到CUDA-BEVFusion文件夹2.5.2 配置environment.sh2.5.3…

力扣贪心算法专题(三)力扣题 452、435、763、56、738、968、714 思路及C++实现

文章目录 贪心算法452. 用最少数量的箭引爆气球435. 无重叠区间做法1 右边界排序 不重叠区间做法2 右边界排序 不重叠区间做法3 左边界排序 重叠区间 763.划分字母区间做法1做法2 56. 合并区间738.单调递增的数字暴力解法贪心算法 968.监控二叉树714.买卖股票的最佳时机含手续费…

CSDN周赛55期 - 简单分析

上期周赛被判抄袭了。。。无语。我从第一期周赛一步步走来&#xff0c;所有题我都做过&#xff0c;我还需要抄袭&#xff1f; 虽然第一时间去申诉&#xff0c;但貌似并没什么用。算了&#xff0c;C站的审核也就这样了&#xff0c;失望寒心。 本期还是《计算之魂》主题赛——不得…

JavaScript 基础 DOM (四)

正则表达式正则表达式 正则基本使用 定义规则 const reg /表达式/其中/ /是正则表达式字面量正则表达式也是对象 使用正则 test()方法 用来查看正则表达式与指定的字符串是否匹配 如果正则表达式与指定的字符串匹配 &#xff0c;返回true&#xff0c;否则false reg.test(…

eclipse环境配置

eclipse环境配置 0. 前言1. 下载eclipse2. 下载sdk3. 配置sdk环境变量4. 验证sdk其他 0. 前言 本节记录如何配置eclipse的sdk配置 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;eclipse 1. 下载eclipse 来这边下载一下eclipse 菜鸟教程 完事之后打开eclips…

回归测试概念和4种回归测试策略——你想知道的都在这里啦!

前言&#xff1a; 回归测试是指修改了旧代码后&#xff0c;重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分&#xff0c;在整个软件测试过程中占有很大的工作…