CommandLineToArgvW 함수(shellapi.h)

유니코드 명령줄 문자열을 구문 분석하고 표준 C 런타임 argvargc 값과 유사한 방식으로 명령줄 인수에 대한 포인터 배열을 반환합니다.

구문

LPWSTR * CommandLineToArgvW(
  [in]  LPCWSTR lpCmdLine,
  [out] int     *pNumArgs
);

매개 변수

[in] lpCmdLine

형식: LPCWSTR

전체 명령줄을 포함하는 null로 끝나는 유니코드 문자열에 대한 포인터입니다. 이 매개 변수가 빈 문자열인 경우 함수는 현재 실행 파일의 경로를 반환합니다.

[out] pNumArgs

형식: int*

argc와 유사하게 반환된 배열 요소 수를 수신하는 int에 대한 포인터입니다.

반환 값

형식: LPWSTR*

argv와 유사한 LPWSTR 값 배열에 대한 포인터입니다.

함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

CommandLineToArgvW에서 반환되는 주소는 LPWSTR 값 배열에 있는 첫 번째 요소의 주소입니다. 이 배열의 포인터 수는 pNumArgs로 표시됩니다. null로 끝나는 유니코드 문자열에 대한 각 포인터는 명령줄에 있는 개별 인수를 나타냅니다.

CommandLineToArgvW 는 인수 문자열에 대한 포인터와 인수 문자열 자체에 대해 연속 메모리 블록을 할당합니다. 호출하는 애플리케이션은 더 이상 필요하지 않은 경우 인수 목록에서 사용하는 메모리를 해제해야 합니다. 메모리를 해제하려면 LocalFree 함수에 대한 단일 호출을 사용합니다.

argvargc 인수 규칙에 대한 자세한 내용은 인수 정의구문 분석 C Command-Line 인수를 참조하세요.

GetCommandLineW 함수를 사용하여 lpCmdLine 매개 변수로 사용하기에 적합한 명령줄 문자열을 가져올 수 있습니다.

이 함수는 프로그램 이름을 포함하는 명령줄을 허용합니다. 프로그램 이름은 따옴표로 묶을 수 있습니다.

CommandLineToArgvW 에는 백슬래시 문자 뒤에 따옴표 문자(")가 있을 때 특수한 해석이 있습니다. 이 해석에서는 이전 인수가 유효한 파일 시스템 경로이거나 예측 불가능하게 동작할 수 있다고 가정합니다.

이 특수 해석은 파서에서 추적하는 "따옴표 내" 모드를 제어합니다. 이 모드가 꺼져 있으면 공백이 현재 인수를 종료합니다. 설정하면 공백이 다른 모든 문자와 마찬가지로 인수에 추가됩니다.

  • 2n 개의 백슬라시 뒤에 따옴표가 붙으면 n 개의 백슬라쉬와 시작/끝 따옴표가 붙습니다. 구문 분석된 인수의 일부가 아니라 "따옴표 안 함" 모드를 전환합니다.
  • (2n) + 백슬라이시 1개, 따옴표 뒤에 따옴표가 다시 n 개 백슬라이시를 생성한 다음 따옴표 리터럴(")을 생성합니다. 이렇게 하면 "따옴표 안 함" 모드가 전환되지 않습니다.
  • n 백슬라시 뒤에 따옴표가 붙지 않는 경우 n 개의 백슬라이시가 생성됩니다.
중요  

CommandLineToArgvW 는 공백을 따옴표 외부에 인수 구분 기호로 처리합니다. 그러나 lpCmdLine 이 공백의 양으로 시작하는 경우 CommandLineToArgvW 는 첫 번째 인수를 빈 문자열로 간주합니다. lpCmdLine의 끝에 있는 초과 공백은 무시됩니다.

 

예제

다음 예제에서는 유니코드 명령줄 문자열을 구문 분석하는 방법을 보여 줍니다. 코드는 종료 시 인수 목록의 메모리를 해제합니다.

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>

int __cdecl main()
{
   LPWSTR *szArglist;
   int nArgs;
   int i;

   szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
   if( NULL == szArglist )
   {
      wprintf(L"CommandLineToArgvW failed\n");
      return 0;
   }
   else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);

// Free memory allocated for CommandLineToArgvW arguments.

   LocalFree(szArglist);

   return(1);
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional, Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server, Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 shellapi.h
라이브러리 Shell32.lib
DLL Shell32.dll(버전 6.0 이상)