如何识别.exe文件是否需要输入参数
某人如何识别他是否需要为C++中的可执行文件输入参数。如何识别.exe文件是否需要输入参数
你应该在代码中找到哪些命令来知道需要哪些参数?
例如,如果您需要像这样运行它:hello.exe test.txt。但你不知道。
所以你运行hello可执行文件,但它需要一个文本文件在它旁边。 如何在代码中识别出需要这种参数?
编辑:我的源代码主要有这样 INT主(INT ARGC,CHAR *的argv []),但参数可以是什么?
argc和argv出现的唯一地方就是在这一行。
#ifdef PARALLEL
Test.CVodeInit_parallel(states,startTime,argc,argv);
#else
Test.CVodeInit_serial(states,startTime);
#endif
参数传递给该程序作为main
函数的参数,这应该是这样的:
int main(int argc, char** argv)
其中argc
是参数的数目和argv
是一个字符串包含实际的阵列参数。
因此请检查代码是否处理这些参数。
注:main
功能也可以是这样的:
int main()
这是合法的,但意味着程序不期待,或者手柄,参数。
看看我的编辑。 – 2012-02-15 19:51:31
你写了“在代码中”,但你问的是“.exe”。目前还不清楚您是否有权访问源代码或想从原始二进制文件中派生出它。在前一种情况下,您将不得不看看main()/ WinMain()函数(或等价的入口点),后一种情况可能不切实际/太难,因为它涉及反汇编和启发式。
我可以访问代码。 – 2012-02-15 19:28:00
这是伟大的,所以要尽量找到主要的()/的WinMain()或类似的主功能,然后看看哪些参数,他们采取,这通常是指的argc/argv的。然后看看他们访问这些变量的地方。 – 2012-02-15 19:33:07
有没有简单的方法来采取活的可执行文件,并询问它需要什么参数。大多数带参数的EXE都有-h
或--help
或/h
或类似的东西来显示它需要的参数。但除此之外,没有。
从源代码中,您可以重构其参数。许多程序使用一些GNU工具来解析来自argv
的参数,因此您需要熟悉这一点才能理解它正在做什么。 Boost.ProgramOptions是一些人使用的替代方案。而其他人只是手动解析参数,所以你必须走代码并观察它从argv
中抽出的内容。
的argc和argv出现的地方是在这行。
然后你必须看看Test.CVodeInit_parallel
的实现来知道它需要什么参数。
例如 - 如果有人运行这样的代码:
用hello.exe的test.txt
然后的argc将是2,argv的[0] = “用hello.exe”,argv的[ 1] = “test.txt的”
但如果它们运行这样的代码:
用hello.exe
然后ARGC为1,argv的[0] = “用hello.exe”
是,这个问题你问什么?基本上ARGC是一个整数,并告诉你有多少字符串是argv数组
你拆卸问题的方案? 传递给应用程序的参数被传递到主(...)函数在字符数组的形式。 – crush 2012-02-15 19:05:01