我遇到嵌入式设备语言中的sscanf问题是C.
我的代码是这样的:
unsigned char by = 0;
char txt[] = "12";
sscanf(txt , "%hhd" , &by);
printf("%d" , by);
当我在linux中运行此代码时,它是正确的,但在Windows(VS2010)中有错误:
“围绕变量'by'被破坏了。”
在我的嵌入式设备中,错误变量'by'变为零。
我该怎么处理这段代码?
答案 0 :(得分:0)
答案 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位整数)。