如何处理linux终端中带有负号(-)的C++中的命令行参数
How to handle command line arguments in C++ that has negative sign (-) in linux terminal?
我需要这个来进行赋值。我知道标准的命令行输入是如何在C++中工作的。如果我有一个名为training的可执行文件,那么我可以在终端中写下以下行:
./training input.text output1 output2
在这种情况下,我的主要方法如下:
int main( int argc, char* argv[] ){
take_input( argv[1] );
make_output( argv[2], argv[3] );
}
我的函数声明如下:
int take_input( string filename );
int make_output( string filename, string filename2 )
然而,我需要按照如下方式编写命令行:
training -i input.csv -os output1 -oh output2
我不知道如何修改。我们将不胜感激。
getopt()
可以工作,但如果您的需求很小,并且不想添加外部依赖项,您可以编写自己的小助手函数来查找短划线关键字在argv
数组中的位置,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Returns the index of the specified keyword (e.g. "-oh")
// or returns -1 if the keyword doesn't exist
static int find_keyword(int argc, char *argv[], const char * keyword)
{
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i], keyword) == 0) return i;
}
return -1;
}
int main( int argc, char* argv[] )
{
const int iIndex = find_keyword(argc, argv, "-i");
if (iIndex < 0) {printf("No -i keyword found! Exiting!n"); exit(10);}
const int osIndex = find_keyword(argc, argv, "-os");
if (osIndex < 0) {printf("No -os keyword found! Exiting!n"); exit(10);}
const int ohIndex = find_keyword(argc, argv, "-oh");
if (ohIndex < 0) {printf("No -oh keyword found! Exiting!n"); exit(10);}
take_input( argv[iIndex+1] );
make_output( argv[osIndex+1], argv[ohIndex+1] );
}
请注意,如图所示的程序不会检查破折号参数后的下一个参数是否存在;例如,如果运行"./a.out-i foo-os bar-o",那么make_output的第二个参数将以NULL形式传入。您可以修改find_keyword()
来检查这种可能性,如果您希望在错误处理中更加健壮,那么在这种情况下可以返回-1。
在Linux上,您只需包含unistd.h
并使用getopt
。
相关文章:
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 数组长度,为什么从命令行获取时不能使用它?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 通过 Openssl 命令行加密,通过 c++ 解密
- CMake "--target install"无需"--build"命令行
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 在 c++ 中处理代码的命令行参数,用于随机输入和用户输入
- 处理命令行参数解析/验证的代码段/lib
- 使用boost命令行解析器处理未知命令
- 创建我的.exe的批处理版本,它接受命令行参数(ParamCount(), ParamStr()和BCB 4.0中的Fi
- 命令行界面/C++。它与'normal' c++ 或 visual c# 有何不同?
- 如何处理命令行参数
- 为什么我的命令行参数处理崩溃我的程序
- 我如何运行GDB,在命令行中输入文本并查看可执行文件如何处理这些条目
- 处理c++中的许多命令行选项
- 如何在命令行界面中处理ctrl中断信号