command-line argument
명령행 인자는 명령어 뒤에 쓰고, 프로그램의 입력과 같이 넣어주는 인자를 말한다.
예를 들어 clang -o hello hello.c에서 -o를 말한다.
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;을 실행하여 잘 끝나게 된다.
일단 컴파일링의 4단계는 1. 전처리, 2. 컴파일링, 3. 어셈블링 , 4. 링킹이다.
여기 없는 디버깅이 정답이다.
디버깅이라고 한다.
printf를 들여쓰기 해야합니다.
char edwith[5];
for(int i=0;i<10;i++)
string names[2];
names[0] = "MONSTER";
names[1] = "MOM";
다른 보기는 다 M인데
names[0][2]은 N이다.
3개 입니다.
make 일듯합니다.
버그
문자열의 끝에는 널 종단 문자가 포함되는것이 맞고
문자열의 각 문자는 메모리상에 연이어 저장이 되며
문자열은 char의 배열로 저장되는 것도 맞습니다.
틀린 것은 문자열은 문자 개수만큼 메모리에 자리를 차지한다입니다.
널문자가 있어야해서 char 개수 + 1 만큼 메모리를 차지합니다.
Easy-!