私は、実行可能ファイルを開き、見つかった特定の印刷可能な文字列を吐き出す小さなユーティリティを書きました。この最後のif文を削除することはできますか?
これはうまくいきますが、私はこれらのif文の1つを削除する方法があるのだろうと思いましたか?私はどのように私は3つの異なるifステートメントが必要ではないが、私は現在の構造でそれを行うことができませんがわからない私の条件を整理することができたのを見てしようとしていた。
#include <stdio.h>
#define MAX_STR_SIZE 0x666
#define MIN_STR_SIZE 0x5
int main(int argc, char** argv)
{
int ch;
int pos = 0;
FILE* f;
char buff[MAX_STR_SIZE];
if (argc>1 && (f=fopen(argv[1], "rb")))
{
while ((ch=getc(f)) != EOF)
{
if (ch >= ' ' && ch <= 'z') // is printable char?
{
buff[pos++] = ch;
buff[pos] = '\0';
if (pos == (MAX_STR_SIZE-1)) // is current string > max length?
{
printf("%08x: %s\n", ftell(f), &buff[0]);
pos = 0;
}
}
else // non-printable char, print any string in buffer and start over
{
if (pos > (MIN_STR_SIZE - 1)) // is current string > min string?
{
printf("%08x: %s\n", ftell(f), &buff[0]); // print current string
}
pos = 0;
}
}
if (pos > (MIN_STR_SIZE - 1)) // any remaining string left to print?
{
printf("%08x: %s\n", ftell(f), &buff[0]);
}
fclose(f);
}
}
、この質問にはCの++はありませんが、あなたのよう – Xeo
慎重なコーダーであると思われますが、あなたの "印刷可能な"テストでは、印刷可能な文字の範囲が連続していて、開始点と終了点が固定されていると誤って仮定しています。 'ü'という文字)、 'ctype.h'から' isprint() 'を使うことを勧めます。したがって、実際に印刷可能な文字を構成するホスト環境に頼ってください。 – Philip