以不同的方式接收命令行输入
taking command line input in different ways
如果不使用下面的结构,如何接受命令行参数?
int main ( int argc, char* argv ) {
}
我的问题是:我怎样才能接受下面的输入?
./executableProgramName inputX inputY inputZ inputT
在任何函数中
in foo () {
// what should I write so that I can get same effect
}
- 有其他的方式来接受命令行输入吗?
标准指定的获取命令行参数的方法是传递给入口点函数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 failedn";
}
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
}
也许最好的方法是将命令行参数的处理转发到一个对象中,或者仅仅是一个函数:
#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));
...
}
您不能从任何函数中任意获取命令行参数。在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
}
如果您正在使用msvc++,那么您可以使用下面的win32 API在程序中随时获取命令行参数:
- GetCommandLine
但是,这会使您的代码是非标准的。因此,如果您使用main(int argc, char *argv[])
来获取命令行参数并保存它们以供以后使用,例如由其他函数使用,则更好。
相关文章:
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 是否可以在命令行中将输入参数传递给可执行文件
- 使用makefile中的命令行输入
- 如何在窗口上的命令行中读取输入 .in 文件
- C++使用命令行输入 txt 文件,但打开文件失败
- C 错误:从命令行输入更改为变量输入
- 如何创建一个 void 数组,其大小将由用户从命令行输入指定
- 从命令行输入分配二维数组
- istream用于C++/Poco的命令行输入
- 命令行输入c++
- 从命令行输入
- 基于命令行输入创建 2D 数组
- 从命令行输入参数为带 N 字节的十六进制
- 如何为此C++程序提供命令行输入
- 如何在c++中对命令行输入进行类型检查
- 以不同的方式接收命令行输入
- 为什么在c++中每个循环都不要求命令行输入?
- Visual studio c++从命令行输入大字符串
- 从c++命令行输入文本文件