如何处理linux终端中带有负号(-)的C++中的命令行参数

How to handle command line arguments in C++ that has negative sign (-) in linux terminal?

本文关键字:何处理 命令行 参数 C++ linux 处理 终端      更新时间:2023-10-16

我需要这个来进行赋值。我知道标准的命令行输入是如何在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