getopt()
에 관한 주문은 중요하지 않습니다. 모든 문제는 getopt()
로 세 번째 인수 인 : 올바른 (즉 그것은 형식 문자열의) :
추시 형식 문자열이 모두 동일합니다 특정 경우
"c:ba"
"c:ab"
"ac:b"
"abc:"
, 형식 문자열은 할 필요가 "abcd"
과 같은 문과 switch()
문이 제대로 채워집니다.
다음 최소 예제가 도움이 될 것입니다.
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main (int argc, char **argv)
{
int aflag = 0;
int bflag = 0;
char *cvalue = NULL;
int index;
int c;
opterr = 0;
while ((c = getopt (argc, argv, "abc:")) != -1)
switch (c)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cvalue = optarg;
break;
case '?':
if (optopt == 'c')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
abort();
}
printf ("aflag = %d, bflag = %d, cvalue = %s\n",
aflag, bflag, cvalue);
for (index = optind; index < argc; index++)
printf ("Non-option argument %s\n", argv[index]);
return 0;
}
스위치 케이스를 보여줄 수 있습니까? – geekonedge
루프와'switch' 블록을 보여주기 바랍니다. 여러분의 루프가 너무 일찍 종료되기 때문입니다. 일반적으로 루프는'getopt'가 -1을 반환했는지 여부 만 검사하여 반환 값을 변수에 할당하여 'switch' 문에 사용합니다. –
IMO : 명령 줄 인수를 검색하는 가장 좋은 방법은 argc를 사용하여 총 인수 수를 검색하고 * argv []를 사용하여 인수를 검색하는 것입니다. argc는 argv에있는 항목의 개수이고 argv [0]은 프로그램 번호이고 argv [argc]는 명령 행 인수 목록의 끝을 나타내는 널 포인터가됩니다 – user3629249