gpt4 book ai didi

c - 我可以删除最后一个 if 语句吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:07 24 4
gpt4 key购买 nike

我编写了一个小实用程序来打开可执行文件并吐出它找到的某些可打印字符串。

它工作正常,但我想知道,有什么方法可以删除其中一个 if 语句吗?我试图了解如何安排我的条件,这样我就不需要 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);
}
}

最佳答案

我相信这个版本消除了大部分 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)
{
pos = 0;
while (ch >= ' ' && ch <= 'z' && pos < (MAX_STR_SIZE-1)) {
buff[pos++] = ch;
ch = getc(f);
}
if (pos > (MIN_STR_SIZE - 1)) // is current string > min string?
{
buff[pos] = '\0';
printf("%08x: %s\n", ftell(f), buff);
}
}

fclose(f);
}
}

关于c - 我可以删除最后一个 if 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com