LLVM编译器2.0错误?

ANN*_*zdY 0 c c99 llvm

使用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)

San*_*ker 6

因为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变量的一部分.