C-检查main的参数

C-检查main的参数,c,arguments,main,options,C,Arguments,Main,Options,我需要检查一个主函数的参数。您可以使用两个选项运行main-a和-b value,但也有一些选项,您需要输入文件(1,2…N)和输出文件 示例:/main-a--b2输入1输入2输出 但是选择可以在任何地方 示例:/main input1-a input2 input3 input4输出--b1 运行程序所需的最小值是输入和输出 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <unistd.h>

我需要检查一个主函数的参数。您可以使用两个选项运行main
-a
-b value
,但也有一些选项,您需要输入文件(1,2…N)和输出文件

示例:
/main-a--b2输入1输入2输出

但是选择可以在任何地方

示例:
/main input1-a input2 input3 input4输出--b1

运行程序所需的最小值是输入和输出

这是我的密码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int NB = 1;
int FLAGA = 0;
const char *FILEOUT;
char *FILEIN[];

int args_check(int argc, char const **argv) {
    int index = 0;
    if(argc < 3){
         printf("Not enough args.\n");
         return -1;
    }
    for(int i = 1; i < argc; i++) {
        if(strcmp(argv[i], "-a") == 0) {
            FLAGA = 1;         
        }
        else if(strcmp(argv[i],"--b") == 0) {
            i++;
            NB = atoi(argv[i]);
        }
        else {
            FILEIN[index] = argv[i];
            index++;
        }
    }
    FILEOUT = FILEIN[index - 1];
    printf("Input(s) :");
    for(int i = 0; i < index - 1; i++)
        printf(" %s", FILEIN[i]);
    printf("\n");
    printf("Output : %s\n", FILEOUT);
    return index - 1;
}

int main(int argc, char const *argv[]) {
    int index = args_check(argc, argv);
    if(index < 0)
        return 1;
    for(int i = 0; i < index; i++)
        printf("%s\n", FILEIN[i]);
    return 0;
}

为什么我没有得到
test1 test2 test3

您没有在
main
中正确打印
FILEIN
中的元素:

for(int i = 0; i < index; i++)
    printf("%s\n", FILEIN);
关于读取的输入与输出不匹配,罪魁祸首如下:

char *FILEIN[];
这样的定义作为局部或全局变量(仅作为函数的参数)无效,因为未指定数组的大小。gcc将其视为一个包含1个元素的数组,尽管这是一个编译器扩展。结果是,您注销了数组的末尾,调用

您需要为该数组指定一个固定大小,例如:

char *FILEIN[100];

然后你需要确保你写的元素不会超过(在本例中)100个。

你为什么要重新发明轮子?在Unix/Linux系统上运行时,有一个函数
getopt
,它可以为您的用户解决所有这些问题。如果您正在Windows系统上工作,请查找
XGetOpt
Ho yes。。。但是为什么我有
Input(s):i1o i3
而没有
Input(s):i1i2i3
?@MrGuim你用
-d--maxthreads
调用程序,它没有显示在输入文件列表中,所以你发布的代码显然不是你正在运行的代码。所以用你实际使用的代码更新你的问题,我们会看到的。完成我的整个程序。Thx的帮助!
char *FILEIN[];
char *FILEIN[100];