티스토리 뷰

Language/C

C - 명령행 인자

ShinyOcean 2021. 1. 28. 05:28

C언어를 주제로 한  여덟번째 포스팅은 명령행 인자에 대하여 다루어보겠습니다.

 

 

지금까지는 헤더파일을 선언하고 main함수에 인자에 항상 void로 채워 넣었습니다. 이는 프로그램을 실행할때

아무런 인자 없이 그냥 실행해왔기 때문입니다. C언어에서는 프로그램을 실행할때 명령행 인자로 값을 줄수 있습니다.

 

이번 포스팅은 C언어의 메인함수를 "int main(int argc, char *argv[])" 이렇게 선언하여

명령행인자를 주는 방법과 명령행인자를 활용할수 있는 코딩에 대하여 다루어보겠습니다.

 

 

 

C 예제문제 10번 - 다음의 조건을 만족하는 프로그램을 작성하시오.

명령행 인자로 두 개의 문장을 받는다. (두 개의 문장이 안되면 될 때까지 계속 받아야 함.)
각각의 문장의 길이가 얼마인지 알아내어 출력하기. 각각의 문장을 reverse 로 만들어 출력하기.

 

 

해결 과정)

 

Step1) 명령행 인자로 두개의 문장을 받는다.

 

이부분은 책527~529의 내용을 참고 하여 메인 함수를 선언할 때 int argc 와 char *argv[]로 명령인자를 기술하였습니다.

P.527 : 매개변수 argc는 명형행에서 입력한 문자열의 수이며 argv[]는 명령행에서 입력한 문자열을 전달 받는 문자 포인터 배열이다.

따라서 메인함수의 선언을 다음과 같이 하였습니다.

 

int main(int argc, char *argv[]) {

        …

return 0;

}

 

그리고 두개의 문장을 받을때만 프로그램이 원하는대로 실행되고 두개가 아닐때는 “명령인자를 2개로 하여 다시 실행하여 주세요” 라는 문구를 출력하도록 하였습니다.

 

if (argc == 3) {

for (int i = 1; i < argc; i++) {

        }

}

else printf("\n 명령인자를 2개로 하여 다시 실행하여 주세요\n");

 

여기서 argc가 3인이유는 명령창에서 프로그램 실행시 자동으로 arg[0]에 파일의 경로가 입력되기 때문이었습니다. 그래서 arg[1]과 arg[2]에 유저가 입력한 2개의 문구가 들어가기 때문에 위와 같이 코딩하였습니다.

 

Step2) 각각의 문장의 길이가 얼마인지 알아내어 출력하기. 각각의 문장을 reverse 로 만들어 출력하기.

 

다음은 string.h헤더파일에 포함되어있는 함수인 strlen()과 P.523의 문자열의 리버스를 구하는 LAB예제를 이용하여 두가지 출력을 화면에 보이겠습니다.

 

먼저 헤더파일을 포함합니다.    #include<string.h>

다음으로 문장의 문자 개수를 구해주는 함수인 strlen()을 사용하고 printf문을 통해 출력해줍니다.

printf("%d번째 입력한 문장의 길이는 : %d\n", i, strlen(argv[i]));

마지막으로 LAB의 reverse를 함수로 구현하여 메인함수 이전에 선언해주고 메인에서 불러왔습니다. 단 LAB과 조금 다르게 저는 리턴타입을 char* 즉 스트링의 주소값으로 하여 리버스후 결과 문자열을 리턴해주도록 하였습니다.

 

char* reverse(char str[]) {

        for (int i = 0, j = strlen(str) - 1; i < j; i++, j--) {

                 char c = str[i];

                 str[i] = str[j];

                 str[j] = c;

        }

        return str;

}

 

그리고 메인함수에서 printf("%d번째 입력한 문장의 리버스 결과는 : %s\n", i, reverse(argv[i]));

출력해줌으로 코딩을 마무리 하였습니다.

 

 

 

전체 코드)

 

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

//길이 출력, 리버스 출력 두문장 받음

char* reverse(char str[]) {

        for (int i = 0, j = strlen(str) - 1; i < j; i++, j--) {

                 char c = str[i];

                 str[i] = str[j];

                 str[j] = c;

        }

        return str;

}

int main(int argc, char *argv[]) {

 

        if (argc == 3) {

                 for (int i = 1; i < argc; i++) {

                         printf("%d번째 입력한 문장 = %s\n", i, argv[i]);

                         printf("%d번째 입력한 문장의 길이는 : %d\n", i, strlen(argv[i]));

                         printf("%d번째 입력한 문장의 리버스 결과는 : %s\n", i, reverse(argv[i]));

                 }

        }

        else printf("\n 명령인자를 2개로 하여 다시 실행하여 주세요\n");

       

        return 0;

}

 

결과 콘솔)

'Language > C' 카테고리의 다른 글

C - Struct Array, pointer, 구조체 배열과 포인터  (0) 2021.01.28
C - Struct, 구조체  (0) 2021.01.28
C - 문자열 연습  (0) 2021.01.27
C - 1, 2차원 배열 포인터 & 함수  (0) 2021.01.27
C - 전위 연산 & 후위 연산  (0) 2021.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함