웹사이트 검색

Linux C 프로그래밍 자습서 22부 - C 프로그램 내에서 명령줄 인수 액세스


이 페이지에서

  1. C 프로그램 내에서 명령줄 인수에 액세스하는 방법\n
  2. 결론

이전 자습서에서는 C 프로그래밍 언어의 포인터와 관련된 여러 개념에 대해 설명했습니다. 논의한 개념 중 하나는 포인터 배열이었습니다. 개념을 설명하기 위해 정수 포인터 배열의 예를 사용했습니다.

C 프로그램 내에서 명령줄 인수에 액세스하는 방법

그러나 해당 자습서에서 언급했듯이 포인터 배열은 다른 유형일 수 있습니다. 예를 들어 다음은 문자 포인터의 배열입니다.

char *arr[] = {"HowtoForge", "FaqForge", "Linux"};

그리고 이 배열이 어떻게 사용될 수 있는지 보여주는 작은 프로그램이 있습니다.

#include <stdio.h>

int main()
{
char *arr[] = {"HowtoForge", "FaqForge", "Linux"};

printf("\n %s", *arr);
printf("\n %s", *(arr+1));
printf("\n %s", *(arr+2));


return 0;
}

arr은 이 배열의 첫 번째 요소의 주소입니다. 이제 이것은 포인터의 배열이므로 첫 번째 요소(및 arr에 1과 2를 추가하여 액세스하는 다른 모든 요소)는 주소일 뿐입니다. 따라서 해당 주소를 유지하는 값에 액세스하려면 * 연산자를 사용합니다.

다음은 이 프로그램의 출력입니다.

HowtoForge 
FaqForge
Linux

이것이 문자 포인터 배열에서 값에 액세스하는 방법입니다. 이제 우리가 왜 이 모든 것을 논의했는지 생각하고 계실 것입니다.

C 프로그래밍 언어를 지원하는 환경에서 명령줄 인수에 액세스할 수 있는 기능이라는 또 다른 중요한 개념을 제공하기 때문에 그렇게 했습니다. 이에 대해 자세히 논의합시다.

지금쯤이면 잘 알겠지만 main은 프로그램이 실행될 때 호출되는 프로그램의 첫 번째 함수입니다. argc와 argv라는 두 개의 인수로 호출됩니다. 전자는 명령줄 인수의 수에 대해 알려주지만 후자는 실제로 인수 자체에 대한 포인터의 배열입니다.

프로그램 자체의 이름이 기본 함수에 대한 인수로 전달된다는 점에 유의하십시오. 따라서 이 때문에 argc로 표시되는 인수의 수는 프로그램에 전달된 실제 인수 수보다 하나 더 많습니다. 다음은 예입니다.

#include <stdio.h>

int main(int argc, char *argv[])
{
printf("\n %d", argc);
printf("\n %s", *argv);

return 0;
}

이제 우리는 시스템의 홈 디렉토리에 있는 a.out이라는 이 프로그램을 인수 없이 실행했습니다. 결과는 다음과 같습니다.

 1 
/home/a.out

따라서 프로그램의 실행 이름이 인수로 전달된 것을 볼 수 있습니다. 다음 명령을 사용 했습니까?

/home/a.out htf ff

이 경우 argc는 3이고 argv는 문자열 /home/a.out, htf 및 ff의 주소를 포함했을 것입니다.

인수 인쇄 프로그램을 작성하는 더 좋은 방법은 다음과 같습니다.

#include <stdio.h>

int main(int argc, char *argv[])
{
for(int i=0; i<argc; i++)
printf("\n %s", *(argv+i));

return 0;
}

인수가 명령줄에 전달된 것과 동일한 순서로 배열에 저장된다는 점을 기억할 가치가 있습니다.

결론

C 코드 내에서 명령줄 인수를 처리해야 하는 몇 가지 상황에 직면할 수 있습니다. 여기서 논의한 내용은 귀하를 위한 기초가 되어야 합니다. C 프로그램 내에서 명령줄 인수에 액세스하는 방법에 대한 더 나은 아이디어를 얻으려면 마지막에 몇 가지 프로그램을 시도하십시오.