#4
by かずま » 7年前
VC++ や gcc では、60行目の '\~' について、
「不正なエスケープシーケンス」という警告が出ます。
'~' と書きましょう。
あと気になったのは、
・このプログラムは、バイナリエディタではなく、16進ダンプである。
・16進表示をするのに、「バイナリ表示」というエラーメッセージがある。
・ファイルのオープンに失敗したのに、「読み込みに失敗」となっている。
・47行目だけ、j
の代わりに *(j + i) と書いている。
・EOF と書くべきところを -1 と書いている。
・<ctype.h> の isprint が使えるのに、checkAscii を定義している。
・fopen しているのに、fclose がない。(なくてもかまわないのですが)
修正版
コード:
#include <stdio.h> // fopen, fclose, fread
#include <ctype.h> // isprint
int main(int argc, char *argv[])
{
FILE *fp; unsigned char b[16]; unsigned addr, i, n;
if (argc != 2) return puts("ファイルを指定して下さい。"), 1;
fp = fopen(argv[1], "rb");
if (!fp) return printf("%s のオープンに失敗しました。\n", argv[1]), 2;
puts(" 0 1 2 3 4 5 6 7 8 9 A B C D E F");
for (addr = 0; (n = fread(b, 1, 16, fp)) > 0; addr += n) {
printf("%4x: ", addr);
for (i = 0; i < n; i++) printf("%02x ", b[i]);
printf("%*s", (16 - n) * 3 + 4, "");
for (i = 0; i < n; i++) putchar(isprint(b[i]) ? b[i] : '.');
putchar('\n');
}
fclose(fp);
return 0;
}
VC++ や gcc では、60行目の '\~' について、
「不正なエスケープシーケンス」という警告が出ます。
'~' と書きましょう。
あと気になったのは、
・このプログラムは、バイナリエディタではなく、16進ダンプである。
・16進表示をするのに、「バイナリ表示」というエラーメッセージがある。
・ファイルのオープンに失敗したのに、「読み込みに失敗」となっている。
・47行目だけ、j[i] の代わりに *(j + i) と書いている。
・EOF と書くべきところを -1 と書いている。
・<ctype.h> の isprint が使えるのに、checkAscii を定義している。
・fopen しているのに、fclose がない。(なくてもかまわないのですが)
修正版
[code=c]
#include <stdio.h> // fopen, fclose, fread
#include <ctype.h> // isprint
int main(int argc, char *argv[])
{
FILE *fp; unsigned char b[16]; unsigned addr, i, n;
if (argc != 2) return puts("ファイルを指定して下さい。"), 1;
fp = fopen(argv[1], "rb");
if (!fp) return printf("%s のオープンに失敗しました。\n", argv[1]), 2;
puts(" 0 1 2 3 4 5 6 7 8 9 A B C D E F");
for (addr = 0; (n = fread(b, 1, 16, fp)) > 0; addr += n) {
printf("%4x: ", addr);
for (i = 0; i < n; i++) printf("%02x ", b[i]);
printf("%*s", (16 - n) * 3 + 4, "");
for (i = 0; i < n; i++) putchar(isprint(b[i]) ? b[i] : '.');
putchar('\n');
}
fclose(fp);
return 0;
}
[/code]