본문 바로가기
개발 Tools/C_개념

C 자료구조 문자열 ( strcpy, strlen, strcat, strcmp, strdup )

by 전컴반 2022. 1. 10.
반응형
문자열

 

c언어에서 문자열은 배열을 만들어서 저장한다. 배열의 칸 하나에 한 글자씩 저장한다. 이때 주의해야 할 점은 만약 내가 'hello'를 저장하고 싶다면 5글자지만 6칸의 배열을 만들어야 한다. 왜냐면 문자열이 끝났다는 NULL(\0) 문자를 넣어줘야 한다. 

 

저작권침해의사없음

 

선언하는 방법은 2가지 정도가 있는데 차이점이 있다. 

 

char str[10];
str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0';

또는

char str[] = "hello";

또는

char *str = "hello";

출력법
printf("%s", str);

 

중요한 것은 ""이다.

첫 번째 선언 방법에서 \0가 없다면 hello 뒤에 이상한 문자들이 나온다.

두 번째 선언 방법은 글자 수에 맞게 배열을 선언해준다. NULL(\0) 문자를 포함한 크기다.

세 번째 선언 방법은 수정이 불가하다는 점에서 이것을 string literal이라 부른다.

 

 

문자열 함수

 

문자열 함수는 string.h인데 대표적으로 사용하는 애들은 아래 정도 있다

strcpy(str1, str2) : 문자열 복사, str2를 str1으로 복사한다

strlen(str) : 문자열 길이

strcat(str1, str2) : 문자열 합치기

strcmp(str1, str2) : 문자열 비교, str2와 str1이 같다면 0을 반환, str1이 str2보다 사전적으로 더 크면 양수를 반환, 작으면 음수를 반환

strdup(str1) : 문자열 복제

 

 

문자열들의 저장

 

여러 개의 단어들을 포인터를 이용하여 저장할 수 있다. 

 

저작권침해의사없음

 

#define BEFFER_SIZE 100 // 입력받는 크기가 100을 넘지 않는다

int main() {

    char *words[100]; //칸마다 저장되는 배열의 타입
    int n = 0; //단어의 갯수
    char buffer[BUFFER_SIZE];

    while (n < 4 && scanf("%s", buffer) !=EOF) {
    	words[n] = strdup(buffer); //그냥 buffer라고 하면 계속 갱신되서 마지막에 입력받은 값만 남는다
        n++;
    } 

    for (int i = 0; i < 4; i++) {
    	printf("%s\n", words[i]);
    }
}

 

입력을 받을 때 buffer 앞에 '&'가 없는 이유는 배열의 이름이 주소를 저장하고 있는 포인터 변수이기 때문이다. 

EOF는 파일의 끝까지 도달하는 것을 의미한다.(end of file)

반응형

댓글