sscanf嵌入式设备?

时间:2012-02-28 09:13:01

标签: c scanf

我遇到嵌入式设备语言中的sscanf问题是C.
我的代码是这样的:

unsigned char by = 0;
char txt[] = "12";
sscanf(txt , "%hhd" , &by);
printf("%d" , by);

当我在linux中运行此代码时,它是正确的,但在Windows(VS2010)中有错误:

  

“围绕变量'by'被破坏了。”

在我的嵌入式设备中,错误变量'by'变为零。

我该怎么处理这段代码?

2 个答案:

答案 0 :(得分:0)

检查scanf宽度格式化MSDN page,VC ++不支持"hh"说明符。

如果可以的话,请使用strtol

答案 1 :(得分:0)

只需使用atoi

const char* txt = "12";
unsigned char by = (unsigned char ) atoi(txt);

另一件事。

printf("%d" , by); 

这将无法正常工作,因为printf需要一个signed int并且正在获取一个unsigned char。它可能仅在您的嵌入式系统具有8位整数时才有效,但它不能在PC上运行。

另外你得到损坏的堆栈错误的原因是因为sscanf解释%hhd意味着它应该读取一个十进制值(我在我的计算机上测试它),所以它覆盖变量'by'周围的内存4字节(如果你有32位整数)。