如何通过不使用以下结构来获取命令行参数?
int main ( int argc, char* argv ) {
}
我的问题是:我怎样才能接受以下输入:
./executableProgramName inputX inputY inputZ inputT
在任何功能中?
in foo () {
// what should I write so that I can get same effect
}
答案 0 :(得分:2)
获取命令行参数的标准指定的方法是传递给入口点函数main
的argc和argv参数。没有其他标准方法。
某些平台提供非标准方法。例如,如果您使用的是Windows,则可以使用GetCommandLineW
这是一个使用一些C ++ 11的例子。
#include <ShellAPI.h> // for CommandLineToArgvW
#include <string>
#include <vector>
#include <codecvt>
#include <locale>
int main() {
#ifdef WIN32
LPWSTR *szArglist;
int argc;
szArglist = CommandLineToArgvW(GetCommandLineW(),&argc);
if(NULL==szArglist) {
std::cerr << "CommandLineToArgvW failed\n";
}
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t> convert; // codecvt_utf8 or codecvt<char16_t,char,mbstate_t> should work (will work once the char16_t specialization of codecvt works)
vector<string> args;
for(int i=0;i<argc;++i) {
args.push_back(convert.to_bytes(szArglist[i]));
}
#endif //ifdef WIN32
}
答案 1 :(得分:1)
您不能随意从任何函数获取命令行参数。在C ++中,传入命令行参数的唯一方法是通过main函数中的char *数组。
如果您希望可以从任何地方访问它们,请考虑将它们保存在全局变量中,或将它们传递到每个必要的函数调用中。例如:
int argumentCount;
char **argumentArray;
int main ( int argc, char** argv )
{
argumentCount = argc;
argumentArray = argv;
}
int foo()
{
std::cout << argumentArray[0]; // or whatever
}
答案 2 :(得分:1)
也许最好的方法是将命令行参数的处理转发到一个对象中,或者只是一个函数:
#include <vector>
#include <string>
void handle_commandline_args(const std::vector<std::string>& args){
...
}
int main(int argc, char* argv[]){
handle_commandline_args(std::vector<string>(argv[0], argv[0] + argc));
...
}
答案 3 :(得分:1)
如果您正在使用MSVC ++,那么您可以在程序中随时使用win32 API获取命令行参数:
然而,这会使您的代码不标准。因此,最好使用main(int argc, char *argv[])
获取命令行参数并保存以供以后使用,例如供其他函数使用。