本文主要是介绍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造成的越界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!