Development Log
[CS50] C언어 - 문자열 본문
C에는 string(문자열)이 없다.
C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 정확하게 명시해줘야 한다.
문자열 (string)
- 쌍따옴표 안에 들어간 0개 이상의 문자배열이다.
- 단어나, 구문, 문장, 0개 이상의 문자 혹은 알파벳 글자들이 쌍따옴표 안에 들어간다.
- 숫자와는 다른 종류의 data type이다.
#include<stdio.h>
#include<cs50.h>
// cs50.h 파일에 string 문자열 형식, get_string 함수에 대한 코드가 포함되어있다.
int main(void)
{
string answer = get_string("what is your name?\n"); // get_string : 프롬프트에 사용자의 입력을 받아서 그 입력을 반환하는 함수이다.
printf("hello, %s\n", answer); // 이름이라는 문자열을 받기위해 %s를 이용해 인자를 받는다.
}
※ CS50 강의가 제공하는 cs50.h라는 파일 안에 있는 문자열을 사용한다.
CS50 라이브러리를 사용할 때 주의할 점
ch50.h에 있는 get_string 함수와 문자열 등을 구현하기 위해 C로 코드를 작성했을 것이다.
ch50라이브러리의 0과 1들은 클라우드 어디가에 저장되어 있다.
이 라이브러리의 0과 1들은 소스코드의 0과 1들에 연결되어야 한다.
주의할 점 1
소스코드에서는 컴퓨터에게 cs50.h라는 파일을 추가하라고 해야한다.
즉, 사용하는 함수가 들어있는 헤더 파일을 추가해야한다.
// 주의할 점 1
#include<cs50.h>
=> 헤더 파일만 추가하고 실행할 경우 에러가 발생한다.
$ clang -o string string.c
/tmp/string-70c9d8.o: In function `main':
string.c:(.text+0x19): undefined reference to `get_string'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
주의할 점 2
다시 한번 컴퓨터에게 cs50.h에 있는 get_string 함수나 문자열 같은 것들을 구현하는 모든 코드를 추가하도록 해야한다.
즉, 현재 소스코드에 cs50.h에 있는 코드를 추가해야한다. (명령어로 연결)
$ clang -o string string.c -lcs50
=> -o string는 string.c를 string.out이라는 머신코드로 저장하도록 하는 명령어이다.
=> -lcs50은 link라는 의미를 지닌 -l 이라는 인자에 우리가 추가로 포함한 cs50.h 파일을 합친 것을 의미한다.
=> 이를 통해 컴파일시 cs50.h 파일을 연결하도록 알려줄 수 있다.
$ make string
clang -fsanitize=signed-integer-overflow -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow string.c -lcrypt -lcs50 -lm -o string
=> 명령어 아래의 출력들이 모두 자동으로 만들어진다.
=> make 명령어는 알아서 어떤 인자를 사용해야 할지 파일명은 무엇으로 할지, 어떤 라이브러리나 코드를 연결했는지 등을 찾아준다.
=> 사용방법 : make 프로그램의 이름 (ex. make string.c (x) make string (o))
- make hello라고 친다.
- hello.c 라는 파일을 찾는다.
- 찾은 뒤 hello라는 파일을 만든다.
=> 즉, 소스코드(hello.c)를 머신코드(hello)로 컴파일 해주는 것이다.
think about
1) "좋아하는 동물을 알려주세요"로 질문하여 동물 이름을 animal이라는 변수에 저장하고, 이를 "내가 좋아하는 동물은"으로 출력해주는 코드를 작성해보세요.
// animal.c
#include<stdio.h>
#include<cs50.h>
int main(void){
string animal = get_string("좋아하는 동물을 알려주세요");
printf("내가 좋아하는 동물은 %s이다\n",animal);
}

David J. Malan의 강의
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org
'성장 여행기 > CS50' 카테고리의 다른 글
| [CS50] C언어 - 사용자 정의 함수, do-while, 중첩 루프 (0) | 2022.03.25 |
|---|---|
| [CS50] C언어 - 조건문과 루프 (0) | 2022.03.25 |
| [CS50] C언어 - 기초 (0) | 2022.03.24 |
| [CS50] 컴퓨팅 사고 - 알고리즘 (0) | 2022.03.24 |
| [CS50] 컴퓨팅 사고 - 정보의 표현 (0) | 2022.03.23 |