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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章