sscanf造成的越界

2024-01-25 06:32
文章标签 造成 越界 sscanf

本文主要是介绍sscanf造成的越界,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这几天写代码的时候发现了一个错误,比较奇怪。

代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "stdint.h"int main()
{uint8_t a = 0;uint16_t b = 0;uint32_t c = 100;uint8_t buff[] = "1 2";sscanf(buff,"%d %d",&a,&b);printf("a = %d,b = %d,c = %d\r\n",a,b,c);return 0;}

看起来大头上没有什么问题。
但是执行起来

a = 1,b = 2,c = 0

其实这个编译的时候已经报了这个问题,但是我们常常会忽视他。
在这里插入图片描述
说到底,就是每次sscanf一个%d的时候都是按照4个字节来赋值的。但是我们给的是一个uint8_t,一个字节,这样旁边的几个位就被污染了,从而导致数据就变了。

那咋整呢这玩意

sscanf(buff,"%hhd %hd",&a,&b);

hh for uint8_t
h foruint16_t

a = 1,b = 2,c = 100

ok

这篇关于sscanf造成的越界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642375

相关文章

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

关于C++数组越界的异常

数组越界一般是很难发现的,而且并不是每次都会崩溃. 比如说定义一个数字 #DEFINE MAX_ARRAY 5 int m_IntArray[MAX_ARRAY]; 我们在初始化的时候,故意给他越界,这个时候一般是不会报错的. for(int i=0;i<15;i++) { m_IntArray[i]=0; } 尤其是全局变量,居然一点提示都没有,局部变量会报溢出堆栈. 这种问题会导致全局变量

警惕memcpy()函数越界

在维护一个工程师的代码时,发现memcpy()导致越界

DMA引起数组越界

今遇到了内存越界问题,很隐蔽   EXTERN  __IO uint16_t RegularConvData_Tab[2*3]; 定义的DMA搬运工的buffer大小为6   实际上当时红线标注,改为了12,导致后续的变量被赋值 只要此值小于定义的buffer的大小就可以了   这个越界是非常不注意的问题,编译器不报错

越界智能监测摄像机

随着科技的不断发展,越界智能监测摄像机 在安防领域得到了广泛应用。这种智能监测设备结合了图像识别技术和人工智能算法,旨在实现对区域内物体的越界行为进行监测和警示。通过高清晰度的摄像头捕捉到场景中的物体图像,并通过人工智能技术进行快速准确的边界检测,为安防管理提供重要支持。 首先,越界智能监测摄像机具有高效的图像识别功能。通过先进的图像处理算法,可以快速准确地识别出场景中的物体,并

[H贪心] lc3273. 对 Bob 造成的最少伤害(贪心+排序+推公式+双周赛138_4)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:3273. 对 Bob 造成的最少伤害 题单: na na 2. 题目解析 略低于正常难度的 T4。 显然我们应该尽可能的将伤害高的先消掉,然后写完代码就会发现 WA 了。想太简单了,那就推推公式看看怎么回事吧。这里直接贴一下 蛙佬 的题解吧。简洁移动,也很容易能发现这个。 来自: 作者:TsRea

PL/sql 启动时出现:NLS_LANG在客户端不能确定,字符集转变将造成不可预期的后果...

PL/sql 启动时出现:NLS_LANG在客户端不能确定,字符集转变将造成不可预期的后果 http://www.cnblogs.com/sekon/archive/2011/12/29/2306665.html posted @ 2017-10-24 15:35 酸奶加绿茶 阅读( ...) 评论( ...) 编辑 收藏

静态方法是否在高并发下造成内存混乱研究

先上代码         Thread t1 = new Thread(new Runnable() {             @Override             public void run() {                 // TODO Auto-generated method stub                 int n = 0;

一次mysql FORMAT函数造成的风波

使用mysql format函数的时候数字超过以前之后得到的查询结果会以逗号分割,此时如果你程序接收还是数字类型将会转换异常 所以如果你的就收属性是数字类型那么就使用这两个个函数, select cast(字段,decimal(12,2)) AS aa convert(字段, decimal(12,2))  AS bb

虚幻5|暴击攻击和释放技能,造成伤害

玩家数据的Actor组件制作:虚幻5|制作玩家血量,体力-CSDN博客 造成伤害时,显示暴击及暴击字体颜色和未暴击的字体颜色,还有释放技能连击 一.编辑暴击数据 1.打开之前创建的玩家数据Actor组件 创建一个浮点变量,命名为基础暴击,并右侧细节默认值为0.1,0.1表示10% 创建一个浮点变量,命名为基础攻击,并右侧细节默认值为5 2.创建一个函数,命名为获取暴击 编辑以下蓝