测试在Linux 32位上:
我在我的C代码中发现了一个错误,我简化了代码并将其放在这里:

#define al *(char*)(eax_ptr)
int eax = 0;
int *eax_ptr = &eax;
int edx = 0;
char hh = 254;
.......

eax = hh;
edx = al;

问题是,edx应该是254,但是在我使用gdb调试的地方,
我发现edx等于零。
有人能帮我解决这个问题吗。。?
谢谢您!

最佳答案

此代码的结果是不可预测的。初始化
char hh = 254;
并不能保证在每个平台上都能成功。char可能无法容纳254个字符(如果您的平台使用签名字符和8位字符,这是一种常见的选择)。
假设achar可以保存254这样的值,则此赋值:
eax = hh;
将通过插入前导零将hh扩展到整数大小。当您稍后将eax(一个整数)解释为一个char(这实际上是您对cast所做的操作)时,结果将取决于机器的endianness:如果它是小endian,它将读取254,否则,它将读取0。

关于c - 为什么变量变为零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21442181/

10-11 19:45
查看更多