我在嵌入式设备语言是C.
我的代码是这样的:
unsigned char by = 0;
char txt[] = "12";
sscanf(txt , "%hhd" , &by);
printf("%d" , by);当我在linux中运行这段代码时,它是正确的,但是在windows (VS2010)中有错误:
“在变量'by‘周围堆叠已损坏”。
而在我的设备上,错误变量“by”改为零。
我该怎么处理这段代码?
发布于 2012-02-28 09:23:14
检查MSDN页面上的scanf宽度形成,VC++不支持"hh"说明符。
如果可以的话,可以使用strtol。
发布于 2012-02-28 09:23:17
只需使用阿托伊
const char* txt = "12";
unsigned char by = (unsigned char ) atoi(txt);还有另一件事。
printf("%d" , by); 这将不能正常工作,因为printf正在等待一个签名的int,并且正在获得一个无符号字符。它可能只有当你的嵌入式系统有8位整数时才能工作,但它不能在PC上工作。
另外,您要获得损坏的堆栈错误的原因是,sscanf将%hhd解释为它应该读取一个十进制值(我在我的计算机上测试过它),因此它用4个字节(如果您有32位ints)覆盖了变量'by‘周围的内存。
https://stackoverflow.com/questions/9479157
复制相似问题