测试在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/