Computer Science - C언어_문자열

Sangho Moon·2020년 7월 15일
0

Computer Science

목록 보기
6/22
post-thumbnail

문자열을 다루기 위해서는 문자열 형식을 가진 변수가 필요하다.

사용자로부터 문자열을 입력받고 이를 다른 문자열과 합쳐서 출력하는 프로그램을 C로 작성해보자.


  • What's your name? 이라는 문자를 특정 변수에 담은 뒤, 파일을 실행시키면 What's your name?이 출력되도록 코드를 작성


1. 변수 선언

여기서 유의해할 점은 C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 한다.

그래서 우리는 저장하고자 하는 값의 종류가 문자열(string)이라는 것을 알려줘야 한다. 이때 string을 형식지정자라고 한다.

#include <stdio.h>

int main(void) 
{
    string answer = get_string("What's your name?\n");
};

위 코드의 의미는 get_string 함수가 사용자의 이름을 반환하면 그 이름을 anwser이라는 변수에 저장하는 것이다.

이제 컴퓨터의 메모리 어딘가에 사용자의 이름이 저장되어 있는 것이다.


2. 출력 코드 작성

이때 유의할 점은 printf("hello, answer");이 아니라는 점이다.

이 코드를 실행한다면 answer이 출력이 되어 hello, answer이 그대로 결과로 나온다.

우리는 answer이라는 변수에 들어있는 이름을 출력을 해야하기 때문에 %를 사용해 준다.

이 때도 어떤 종류의 인자를 받는지 말해줘야 한다.

우리는 이름이라는 문자열을 받기때문에 string에서의 s를 %뒤에 붙여서 인자를 받아준다.

그래서 아래 코드와 같이 되는 것이다.

#include <stdio.h>

int main(void) 
{
    string answer = get_string("What's your name?\n");
    printf("hello, %s\n", answer);
}

3. 컴파일

현재 작성하고 있는 파일의 이름은 string.c 이다.

이것을 컴파일하기 위해 터미널에 clang -o string string.c 라고 입력해보겠다.

위와 같이 컴퓨터가 문제점을 찾기 위해 수많은 에러를 배출한다.

여기서 문제는 string이라는 것이 정의되지 않았기 때문이다.

앞서 stdio.h라는 파일에서 printf를 가져왔던 것처럼, string, get_string과 같이 여기서 사용할 다른 함수들도 특정 파일에서 가져와야 한다.

그것들은 모두 cs50.h 라는 파일 안에 있다.

stdio.h를 include 시킨 것처럼, cs50.h도 include 시킨 뒤 다시 실행시켜 보겠다.

#include <cs50.h>
#include <stdio.h>

int main(void) 
{
    string answer = get_string("What's your name?\n");
    printf("hello, %s\n", answer);
}

그래도 여전히 에러가 출력된다.

여기서 컴파일 시 다음과 같이 -lcs50이라는 명령어를 추가로 입력해야 한다.

clang -o string string.c -lcs50

-lcs50은 “link”라는 의미를 지닌 -l 이라는 인자에 우리가 추가로 포함한 “cs50” 파일을 합친 것이다.

이를 통해 컴파일시 cs50 파일을 연결하도록 알려줄 수 있다.

그런데 이런 복잡한 과정 대신에, make 명령어를 통해 간단하게 컴파일을 수행할 수도 있다.

make string

이와 같이 작성한 코드를 컴파일 하고 실행하면, 사용자에게 입력값을 받고 문장 내에 포함하여 출력하는 프로그램이 된다.


Ref.
Edwith_boost course
https://m.blog.naver.com/PostView.nhn?blogId=sharonichoya&logNo=220488567828&proxyReferer=https:%2F%2Fwww.google.com%2F

profile
Front-end developer

0개의 댓글