【问题标题】:Stack corruption using sscanf使用 sscanf 的堆栈损坏
【发布时间】:2014-03-26 04:23:23
【问题描述】:

我有以下代码将 2 个十六进制数字转换为一个字节值:

const char* data= "Some hex string";
unsigned char temp=' ';
sscanf(data, "%2hhx", &temp);

运行它时我得到一个运行时异常,说

变量 temp 周围的堆栈已损坏

我做错了什么? AFAIK 2hhx 应该将两个字节转换为一个......

【问题讨论】:

  • 您确定您的实现支持hh 修饰符吗?

标签: c++ scanf stack-corruption


【解决方案1】:

您确定您的编译器和标准库支持该特定说明符吗?它是 C99 中的新功能。

例如微软不支持它,根据这个:

http://msdn.microsoft.com/en-us/library/xdb9w69d.aspx

这意味着hh 可能被解释为单个h,因此它需要一个指向unsigned short 的指针,而不是unsigned char

【讨论】:

  • 是这样,我可以用什么代替?
  • 只是读入一个更大的整数。规范中的2 仍然确保它不会超出您的预期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多