【发布时间】:2015-09-21 01:07:11
【问题描述】:
printf() 函数打印前导 ffffff (从技术上讲,我理解最高有效位带有符号,因此它一直被带到数据开始的地方)。但是如何摆脱它们我不知道,为什么会这样?
int mem_display(Cmd *cp, char *arguments)
{
int i;
char *adr;
if (!sscanf(arguments,"%x",&adr))
{
return 0;
}
printf("%#0.8s ",arguments);
for (i=0; i<16; i++) {
printf("%02.x ",(unsigned int)*(adr+i));
}
...
输出:
% UNIX> md 10668
/*calling function show memory location 0x10668*/
OUT:
10668 ffffffbc 10 20 ffffffe0 ffffffa0 40 ffffffa2 ffffffa0 44 ffffff9c 23 ffffffa0 20
已解决:
printf("%0.2x ",(unsigned int)*(adr+i));
输出:
UNIX> md 10000
10000 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 .ELF............
【问题讨论】:
-
你为什么用
.和(unsigned int)很可能是错的。 -
您不应取消引用您刚刚输入的地址,即未定义行为(除非它与您刚刚从同一程序执行中打印的相同值)。指针的格式说明符也错误,类型必须是
void *。