C 명령줄 인수 구문 분석
Microsoft 전용
Microsoft C 시작 코드에서는 운영 체제 명령줄에 지정된 인수를 해석할 때 다음 규칙을 사용합니다.
인수는 공백 또는 탭인 공백 문자로 구분됩니다.
첫 번째 인수(
argv[0]
)는 특별하게 처리됩니다. 이 인수는 프로그램 이름을 나타냅니다. 유효한 경로 이름이어야 하므로 큰따옴표("
)로 묶은 파트가 허용됩니다. 큰따옴표는argv[0]
출력에 포함되지 않습니다. 큰따옴표로 묶은 파트는 공백 또는 탭 문자를 인수의 끝으로 해석하는 것을 방지합니다. 이 목록의 이후 규칙은 적용되지 않습니다.큰 따옴표로 묶은 문자열은 공백 문자 포함 여부에 상관없이 하나의 인수로 해석됩니다. 따옴표로 묶은 문자열은 인수에 포함될 수 있습니다. 캐럿(
^
)은 이스케이프 문자나 구분 기호로 인식되지 않습니다. 따옴표 붙은 문자열 내에서 큰따옴표 쌍은 이스케이프된 단일 큰따옴표로 해석됩니다. 닫는 큰따옴표 전에 명령줄이 끝나면 지금까지 읽은 모든 문자가 마지막 인수로 출력됩니다.백슬래시 다음의 큰따옴표(
\"
)는 리터럴 큰따옴표("
)로 해석됩니다.백슬래시는 큰따옴표 바로 앞에 있지 않으면 리터럴로 해석됩니다.
짝수 개의 백슬래시 다음에 큰따옴표가 오는 경우, 백슬래시 쌍(
\\
)마다 하나의 백슬래시(\
)가argv
배열에 배치되고, 큰따옴표("
)는 문자열 구분 기호로 해석됩니다.홀수 개의 백슬래시 다음에 큰따옴표가 오는 경우, 백슬래시 쌍(
\\
)마다argv
배열에 하나의 백슬래시(\
)가 배치됩니다. 큰따옴표는 나머지 백슬래시에 의해 이스케이프 시퀀스로 해석되어 리터럴 큰따옴표("
)가argv
에 배치됩니다.
다음 목록은 몇 가지 명령줄 인수 예제의 경우 argv
에 전달된 해석된 결과를 표시하여 위의 규칙을 보여 줍니다. 두 번째, 세 번째 및 네 번째 열에 나와 있는 출력은 다음 목록 뒤에 나오는 ARGS.C 프로그램에서 제공된 것입니다.
명령줄 입력 | argv[1] |
argv[2] |
argv[3] |
---|---|---|---|
"a b c" d e |
a b c |
d |
e |
"ab\"c" "\\" d |
ab"c |
\ |
d |
a\\\b d"e f"g h |
a\\\b |
de fg |
h |
a\\\"b c d |
a\"b |
c |
d |
a\\\\"b c" d e |
a\\b c |
d |
e |
a"b"" c d |
ab" c d |
예제
코드
// ARGS.C illustrates the following variables used for accessing
// command-line arguments and environment variables:
// argc argv envp
//
#include <stdio.h>
int main( int argc, // Number of strings in array argv
char *argv[], // Array of command-line argument strings
char **envp ) // Array of environment variable strings
{
int count;
// Display each command-line argument.
printf_s( "\nCommand-line arguments:\n" );
for( count = 0; count < argc; count++ )
printf_s( " argv[%d] %s\n", count, argv[count] );
// Display each environment variable.
printf_s( "\nEnvironment variables:\n" );
while( *envp != NULL )
printf_s( " %s\n", *(envp++) );
return;
}
이 프로그램의 출력 예는 다음과 같습니다.
Command-line arguments:
argv[0] C:\MSC\ARGS.EXE
Environment variables:
COMSPEC=C:\NT\SYSTEM32\CMD.EXE
PATH=c:\nt;c:\binb;c:\binr;c:\nt\system32;c:\word;c:\help;c:\msc;c:\;
PROMPT=[$p]
TEMP=c:\tmp
TMP=c:\tmp
EDITORS=c:\binr
WINDIR=c:\nt
Microsoft 전용 종료