我需要检查主函数的参数。您可以使用 2 个选项运行主程序 -a
和 --b value
但是有一些选项,你需要说输入文件(1,2...N)和一个输出文件。
示例:./main -a --b 2 input1 input2 output
但选项可以在任何地方......
示例:./main input1 -a input2 input3 input4 output --b 1
运行程序所需的最低限度是输入和输出。
这是我的代码:
#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;
}
./main -a --b 1 test1 test2 test3 out
,在我的终端上,我看到 Input(s) : test1 out test3
Output : out
test1
out
test3
为什么我没有收到
test1 test2 test3
?
最佳答案
您没有打印 FILEIN
的元素在 main
中正确:
for(int i = 0; i < index; i++)
printf("%s\n", FILEIN);
你正在通过
FILEIN
,它是 char *
的数组, 到 %s
需要单个 char *
的格式说明符.你忘了索引这个数组:for(int i = 0; i < index; i++)
printf("%s\n", FILEIN[i]);
关于读取的输入与输出不匹配,这是罪魁祸首:
char *FILEIN[];
这样的定义作为局部或全局变量(仅作为函数的参数)无效,因为未指定数组的大小。 gcc 会将其视为一个包含 1 个元素的数组,尽管这是一个编译器扩展。结果是你注销了数组的末尾,调用 undefined behavior .
你需要给这个数组一个固定的大小,例如:
char *FILEIN[100];
然后你需要确保你写的元素不超过(在这种情况下)100 个。
关于C - 检查主要参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50272254/