我有这段代码:
#include <stdio.h>
#include <ctype.h>
#include <unistd.h>
#define DATA_SIZE 25
#define LINE 10
#define BYTES_A_ROW ((int)10)
#define ADDR_COLUMN_WIDTH ((int)(2 * sizeof(void *)) - 2) //char size of an address =$
#define BYTE_COLUMN_WIDTH ((int)(BYTES_A_ROW * 3) - 1) // 1 bytes is 2 hex chars + s$
#define COLUMN_SEPARATOR " "
int main() {
typedef unsigned char byte_t;
byte_t data[DATA_SIZE];
int i;
int j;
int remainder = DATA_SIZE % LINE;
// print table header
printf("\n%-*s", ADDR_COLUMN_WIDTH, "Address");
printf("%s", COLUMN_SEPARATOR);
printf("%-*s", BYTE_COLUMN_WIDTH, "Bytes");
printf("%s", COLUMN_SEPARATOR);
printf("%-*s\n", BYTES_A_ROW, "Chars");
for (i = 0; i < ADDR_COLUMN_WIDTH; i++)
printf("-");
printf("%s", COLUMN_SEPARATOR);
for (i = 0; i < BYTE_COLUMN_WIDTH; i++)
printf("-");
printf("%s", COLUMN_SEPARATOR);
for (i = 0; i < BYTES_A_ROW; i++) // number of chars is char-column is exactly$
printf("-");
printf("\n");
for (i = 0; i < DATA_SIZE - remainder; i = +LINE) {
printf("%p ", (void*)&data[i]);
for (j = i; j < i + LINE; j++) {
printf("%02x ", data[j]);
}
for (j = i; j < i + LINE; j++) {
if (isprint(data[j])) {
printf("%c", data[j]);
} else {
printf(".");
}
}
printf("\n");
}
}
出于某种原因,我的第四个for循环保持循环。变量i
保持10
...为什么它不会增加,因此变为20
并逃脱循环?我确定我错过了一些明显的东西。
答案 0 :(得分:5)
您应该使用i+=LINE
代替i=+LINE
。
答案 1 :(得分:3)
在循环中
for(i=0; i<DATA_SIZE-remainder; i=+LINE)
您在每次迭代中将LINE
分配给i
。 +
中的+LINE
是一元+
运算符
您需要在每次迭代中将i=+LINE
更改为i += LINE
以i
增加LINE
。