【发布时间】:2014-02-23 16:21:01
【问题描述】:
我必须为学校编写一个程序,在该程序中我必须将内存打印为字节和字符。问题是,当我输入的数量不是 LINE_WIDTH 的倍数时,字符流不会停止打印,而字节流会停止打印。我对两者都使用了相同的方法,但我不知道为什么它不起作用。有人有想法吗?
这是代码:
void output(long int *sA, int*dSz)
{
int i = 0;
while(abs(i)<abs(*dSz))
{
unsigned char* address = (unsigned char*)(*sA);
if(*dSz>0)
{
printf("\n%#lx\t",(*sA+i));
for(int a=0;a<LINE_WIDTH;a++)
{
if(i==*dSz)
{
printf(" ");
}
else
{
printf("%.2X ",toupper(address[i]));
i++;
}
}
i=i-LINE_WIDTH;
for(int a=0;a<LINE_WIDTH;a++)
{
if(isprint(address[i]))
{
if(i==*dSz)
{
exit(0);
}
else
{
printf("%c ",address[i]);
i++;
}
}
else
{
if(i==*dSz)
{
exit(0);
}
else
{
printf(". ");
i++;
}
}
}
}
这是我的输出:
main函数在内存中的地址为:0x10084a830 main的第一个局部变量在函数栈上的地址为:0x7fff5f3b5ba8
Enter the start address (hex-notation) of dump: 7fff5f3b5ba8
Enter the number of bytes to dump <negative or positive value>: 25
Address Bytes Chars
-------- ----------------------------- -------------------
0x7fff5f3b5ba8 A8 5B 3B 5F FF 7F 00 00 E0 5B . [ ; _ . . . . . [
0x7fff5f3b5bb2 3B 5F FF 7F 00 00 01 00 00 00 ; _ . . . . . . . .
0x7fff5f3b5bbc 00 00 00 00 D0 . . . . . . . . . .
您可以看到字节在它们应该停止的地方停止,但字符不会。
【问题讨论】:
-
嗨。对于 SO 问题来说,代码太多了。请将此归结为一个更简单的最小测试用例,该测试用例显示相同的症状。