저번에 C 기초로 Hello world를 출력시켜보았다.
사용자로부터 값을 받아오고 싶다면 어떨까?
C 에서는 get_string 이라는 함수를 사용하면 가능하다.
(javascript에서 prompt와 같은 기능을 가진 함수)
이렇게 작성을 해주면 이름을 받아올 수 있다.
이제 받은 이름을 저장하여 "hello (이름)" 과 같은 방식으로 출력해주려 한다.
그러기 위해서는 입력 받은 값을 변수에 할당해줘야 한다.
과연 이렇게 적으면 이제 할당이 된 걸까?
아니다.
C 에서는 변수의 타입도 정해주어야 한다.
이름과 같이 텍스트로 적혀있는 데이터 타입은 String(문자열)이다.
그래서 이렇게 string을 answer 앞에 붙여주고 printf를 하는 코드까지 작성하였다.
printf 안에 %s\n 이라는 친구가 있는데 뒤에 \n은 저번 시간에도 다뤘던 내용이다. 다음줄로 넘어가는 것
그럼 %s 가 뭘까.
이 친구는 매개변수이다. string의 s를 써서 %s 자리에 대입해줄 string이 들어올 것이다.
따라서 뒤에 answer을 불러오면 %s 자리에 answer 변수가 들어가서 "hello, 머시기" 이런 식으로 작동한다.
자 이제 터미널에서 실행을 했다. 하지만
에러가 등장했다. get_string이 알 수 없는 레퍼런스라고 한다.
다시 코드 파일을 보면
딱히 문제가 없어 보인다.
get_string이라는 함수는 cs50.h 이라는 라이브러리에 담겨 있는 함수인데 포함시켜주었다.
문제는 컴파일 과정에서 일어난 것이다.
cs50 파일을 연결시킨 후에 get_string을 불러주어야 인식을 하는데 cs50 파일을 연결시키지 않았기 때문에 undefined reference라는 에러가 등장한 것이다.
이게 해결책이다.
뒤에 -lcs50을 추가해주면 된다.
link cs50을 줄여서 lcs50 이라고 하는 것이다.
하지만 다른 라이브러리를 사용하면 매번 해주기 상당히 복잡한 작업이다.
그래서 간단하게 make라고 하면 된다. (파일명만 입력하고 확장자는 입력 X)
이러면 알아서 string.c 파일의 코드를 link 시켜 컴파일 시켜준다.
질문에 대해서 홍길동을 입력해주니 애가 인사를 해준다.
이번 강의에서 배운 것
- 변수 앞에 타입 써주는 방식
- get_string 함수
- make 컴파일 방법
- 매개변수 활용 (ex. %s)
'스터디 > CS50' 카테고리의 다른 글
하버드 cs50 2장 6) 하드웨어의 한계 (0) | 2023.02.11 |
---|---|
하버드 CS50 2장 5) 사용자 정의 함수, 중첩 루프 (0) | 2023.01.25 |
하버드 CS50 2장 4) 자료형, 형식 지정자, 연산자 (0) | 2023.01.15 |
하버드 CS 50 2장 3) 조건문과 루프 (0) | 2023.01.15 |
하버드 CS50 2장 1) C 기초 (0) | 2023.01.14 |