【发布时间】:2021-08-18 07:35:45
【问题描述】:
我想让第三个参数成为可能,如下所示: (像这样的任何位置的文件名)
program -a 3 <filename> -b 6
program -a 3 -b 6 <filename>
如何使用getopt 执行此操作并将此字符串保存在变量file 中?
int main(int argc, char *const *argv) {
int a = 0; int b = 0; int i = 0;
char *A; char *B;
char *file = NULL;
int c;opterr = 0;
while ((c = getopt (argc, argv, "a:b:")) != -1) {
switch (c) {
case 'a': a = 1; A = optarg; break;
case 'b': b = 1; B = optarg; break;
case '?':
if (optopt == 'c') fprintf (stderr, "Option -%c requires an argument.", optopt);
else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.", optopt);
else fprintf (stderr,"Unknown option character `\\x%x'.",optopt);
default: file = optarg; break; }}
strcpy(&file,*(argv + i));
return 0;
}
【问题讨论】:
-
因为
file是一个指针,那么&file是一个指向指针(类型为char **)的指针。这不是strcpy所期望的。您需要将指针传递给已分配数组的第一个元素。到处都有大量关于strcpy的文档。包括在每一本体面的教科书中,你应该阅读。