Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

Development Log

[CS50] C언어 - 문자열 본문

성장 여행기/CS50

[CS50] C언어 - 문자열

gu-su 2022. 3. 24. 23:43
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))

  1. make hello라고 친다.
  2. hello.c 라는 파일을 찾는다.
  3. 찾은 뒤 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