我必須爲學校編寫一個程序,在這個程序中我必須將內存打印爲字節和字符。問題是,當我輸入的字符流數量不是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++;
}
}
}
}
這是我的輸出:在內存主要功能
地址是:函數棧上的主要<第一個局部變量>的0x10084a830 地址是: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問題,這太多了。請將此歸結爲一個簡單的最簡單的測試案例,該案例展示了相同的症狀。 –