본문 바로가기
Coding/C

C언어 - 문자열 (string) 함수

by ZaRi 2023. 5. 20.

 

문자열을 활용할때 자수 쓰이는 문자열 함수에 대해 오늘은 알아보겠습니다.

 


 

 문자열 함수는 다음과 같이 있습니다.

 

 

 

헤더 파일 선언 설명
#include<string.h> string.h 헤더 파일 선언
형태  
strlen(문자열); 문자열의 길이를 정수로 변환
(NULL값을 제외한 길이)
strcmp(문자열1, 문자열2); 두 문자열 같으면 거짓(0), 다르면 참(1, -1)을 반환
1일 경우: 문자열1이 문자열2보다 사전순이 느릴 때
-1일 경우: 문자열1이 문자열2보다 사전순이 빠를 때
(비교연산자 '==' 사용불가)
strcpy(복사할 공간, 문자열) 복사할 공간에 문자열 복사
(대입연산자 사용불가)
strcat(뒤에 붙일 공간, 문자열) 뒤에 붙일 공간에 문자열을 덧붙임
('+' 사용 불가)

 

 

일단 이렇게 문자열 함수가 있습니다.

이제 다음 코드로 정리해보겠습니다.

 

 

 

#include <stdio.h>
#include <string.h>

int main()
{
    char coin[10], coin2[10];
    printf("코인명: ");
    scanf("%s", coin);

    strcpy(coin2, coin);
    printf("coin2 복사: %s\n", coin2);

    printf("coin과 coin2는 같은가? %d\n", strcmp(coin2, coin));

    strcat(coin2, coin);
    printf("coin2 덧붙이기: %s\n", coin2);

    printf("%s의 길이: %d\n", coin, strlen(coin));
    printf("%s의 길이: %d\n", coin2, strlen(coin2));

    return 0;
}

 

 

앞서 설명한 모든 문자열을 다 적어보았습니다.

그럼 이제 결과를 봐보겠습니다.

 

 

 

ETH를-입력하고&#44;-ETH가-복사되고-같은지-비교하고&#44;-붙이고&#44;-등등을-출력한-그림임.
결과1

 

이렇게 결과가 나왔습니다.

하나씩 비교하면서 보면 좋을 것 같습니다.

#include <string.h> 는 이 함수들이 포함되어 있는 파일이기에 꼭 선언을 해주어야 오류가 안납니다.

마치 파이썬의 모듈이라고 생각하면 편할 것 같습니다.

 

 

 

부가설명

문자열 (string) 에서 문자열을 비교할 때 "=="를 사용하는 것이 아니라 strcmp() 함수를 사용해야하는 이유에 대해 설명하겠습니다.

 

 

 

#include <stdio.h>
#include <string.h>

int main()
{
    char coin[10] = "ETH";
    char coin2[10] = "ETH";

    printf("coin과 coin2는 같은가? %d\n", strcmp(coin2, coin));
    printf("coin과 coin2는 같은가? %d\n", coin2 == coin);
    return 0;
}

 

 이렇게 coin 과 coin2 에는 같은 문자열 ETH 가 들어있습니다.

그렇다는건 strcmp에서는 0(거짓)을 반환해야 하고, == 에서는 1(참)을 반환해야합니다.

그럼 한번 결과를 봐보겠습니다.

 

 

 

coin과-coin2는-같은가-0&#44;coin과-coin2는-같은가-0이-출력됨
결과2

 

 그러면 2개다 지금 0이 나왔습니다. 두 코인은 문자열이 같기에 "=="을 썻을 때 원래는 1이 나와야 하지만 0이 나오는 모습입니다.

 이는 "=="이 문자열을 비교하는 것이 아니라. coin변수가 가지고 있는 주소를 비교하기에 0이 나온 것입니다.

 그렇기에 값이 같더라도 그 값이 저장되어있는 주소는 다르다는 것입니다.

 따라서 이런 문자열을 비교할 때는 strcmp를 사용하여야 합니다.

 

 

 


 

 오늘은 문자열 함수에 대해 알아보았습니다. 다른 언어에서도 느끼지만 문자열과 관련된 함수는 많은 것 같습니다.

 다음에는 포인터에 대해 알아보겠습니다.

댓글