CS50_배열_(3)[명령행 인자와 퀴즈]

김두미·2022년 6월 21일
0
post-thumbnail

1. 명령행 인자

command-line argument

명령행 인자는 명령어 뒤에 쓰고, 프로그램의 입력과 같이 넣어주는 인자를 말한다.
예를 들어 clang -o hello hello.c에서 -o를 말한다.

1) main의 인자는 대체 뭘까?

int main(void) {
}

지금까지 이렇게 main을 써왔다
인자로는 void로 아무것도 주지않았다.

이것을 인수를 받도록 변경할 수 있다.

int main(int argc, string argv[]) {
}

첫번째 인자는 int형으로 인수의 개수를, 두번째 인자는 argv라는 이름의 string배열이다. argv에는 인자들이 저장된다.

즉, 프로그램 이름 뒤에 단어를 입력하면 그 단어들은 argv라는 배열에 들어가고 단어의 개수는 argc에 저장되는 것이다.



main은 문제가 없다면 0을 반환한다.

int main(int argc, string argv[]) {
	if (argc !=2 ) {
    	printf("missing command-line argument\n");
        return 1;
    }
    else {
    	printf("hello, %s\n",argv[1]);
        return 0; //문제가 없음 
    }
}

이 코드를의 이름을 exit.c라고 하고 make exit을 통해 exit을 만든다.
그 후 ./exit David를 커맨드 창에 입력한다.

그렇다면 프로그램 이름인 ./exit과 사용자가 입력한 David가 인수로 들어가
argc에는 2가 저장되고, argv[0] 에는 ./exit이 argv[1]에는 David가 저장된다.

그러므로 if(argc!=2) 가 False가 되어 hello, David가 출력되고 return 0;을 실행하여 잘 끝나게 된다.

2. 퀴즈 -!

1) 컴파일링의 네단계에 해당하지 않는 것은 ?

일단 컴파일링의 4단계는 1. 전처리, 2. 컴파일링, 3. 어셈블링 , 4. 링킹이다.

여기 없는 디버깅이 정답이다.

2) 소스코드 내에 존재하는 오류를 해결하기 위한 작업은 ?

디버깅이라고 한다.

3) 코드를 c언어 스타일 가이드에 부합하게 만들려면 ?

printf를 들여쓰기 해야합니다.

4) char 자료형 5개를 담을 수 있는 [edwith]배열을 선언하는 코드는 ?

char edwith[5];

5) int scores[10];이라는 배열이 있을 때 처음부터 끝까지 도는 for 은 ?

for(int i=0;i<10;i++) 

6) 보기 중 그 값이 다른 것은 ?

string names[2];
names[0] = "MONSTER";
names[1] = "MOM";

다른 보기는 다 M인데
names[0][2]은 N이다.

7) '$ ./edwith hello world을 실행하였을 때 argc의 값은 ?

3개 입니다.

8) c 소스파일의 링크, 컴파일, 빌드 작업을 자동화해주는 툴은 ?

make 일듯합니다.

9) 소스코드를 작성할 때 우리가 저지를 실수나 오류를 통상적으로 일컫는 단어는 ?

버그

10) string이 메모리에 저장되는 방식으로 틀린설명은 ?

문자열의 끝에는 널 종단 문자가 포함되는것이 맞고
문자열의 각 문자는 메모리상에 연이어 저장이 되며
문자열은 char의 배열로 저장되는 것도 맞습니다.

틀린 것은 문자열은 문자 개수만큼 메모리에 자리를 차지한다입니다.
널문자가 있어야해서 char 개수 + 1 만큼 메모리를 차지합니다.

Easy-!

profile
개발자를 꿈꾸는 대학생

0개의 댓글