使用LLVM编译器编译以下代码时,它无法正常运行.(我没有增加.)在使用GCC 4.2进行编译时,它可以正常运行.这是LLVM编译器的错误吗?
#include <stdio.h>
#include <string.h>
void BytesFromHexString(unsigned char *data, const char *string) {
printf("bytes:%s:", string);
int len = (int)strlen(string);
for (int i=0; i<len; i+=2) {
unsigned char x;
sscanf((char *)(string + i), "%02x", &x);
printf("%02x", x);
data[i] = x;
}
printf("\n");
}
int main (int argc, const char * argv[])
{
// insert code here...
unsigned char data[64];
BytesFromHexString(data, "4d4f5cb093fc2d3d6b4120658c2d08b51b3846a39b51b663e7284478570bcef9");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为sscanf你用%2x而不是%02x.此外,%2x表示int*将传递额外的参数.但是你通过了unsigned char*.最后,sscanf拿一个const char*第一个参数,所以不需要那个演员.
所以试一试:
int x;
sscanf((string + i), "%2x", &x);
Run Code Online (Sandbox Code Playgroud)
编辑:澄清此更改解决问题的原因:在您的代码中,sscanf尝试sizeof(int)在内存位置(&x)中写入只能保存sizeof(unsigned char)字节(即1个字节)的字节.所以,你覆盖了一定数量的内存.这个被覆盖的内存很可能是i变量的一部分.
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |