【发布时间】:2023-04-03 16:18:01
【问题描述】:
我有这段代码:
#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 并转义循环?我确定我遗漏了一些明显的东西。
【问题讨论】:
-
你的缩进风格是灾难性的。使用经典一致的样式以获得更好的可读性和更少的错误。在诸如
=这样的二元运算符周围添加空格使错误变得明显:i = +LINE而不是i += LINE
标签: c for-loop infinite-loop