long keyIntValue;
uint8_t *value;
sscanf(buffer, " %*[^\"\n]\"%9[^;\"\n]", keyStringValue);
keyIntValue = strtol(keyStringValue, NULL, 16);
*value = *(uint8_t*)keyIntValue;
printf("The value is 0x%x \n", *value);
我使用GCC编译器
获得上述代码的分段错误*(long *)value = keyIntValue;
printf("The value is 0x%x \n", *(long *)value);
上面的代码与gcc一起使用并获得正确的输出但是我得到了bitbake编译器的可疑指针到指针转换(区域太小)
如何解决这个问题?
答案 0 :(得分:3)
*value = *(uint8_t*)keyIntValue;
取消引用未初始化的指针会导致未定义的行为,从而导致分段错误。
答案 1 :(得分:1)
如果您希望将keyIntValue
的一部分视为uint8_t
,则可以采用keyIntValue
的地址来执行此操作,如下所示:
unsigned char *value;
value = (unsigned char*)(&keyIntValue);
printf("The value is 0x%x \n", *value);
注意:我将value
的类型更改为指向unsigned char
的原因是为了避免违反严格别名规则。允许字符类型的指针对任何内容进行别名,因此更改类型可以修复别名问题。