문자열을 활용할때 자수 쓰이는 문자열 함수에 대해 오늘은 알아보겠습니다.
문자열 함수는 다음과 같이 있습니다.
헤더 파일 선언 | 설명 |
#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;
}
앞서 설명한 모든 문자열을 다 적어보았습니다.
그럼 이제 결과를 봐보겠습니다.
이렇게 결과가 나왔습니다.
하나씩 비교하면서 보면 좋을 것 같습니다.
#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(참)을 반환해야합니다.
그럼 한번 결과를 봐보겠습니다.
그러면 2개다 지금 0이 나왔습니다. 두 코인은 문자열이 같기에 "=="을 썻을 때 원래는 1이 나와야 하지만 0이 나오는 모습입니다.
이는 "=="이 문자열을 비교하는 것이 아니라. coin변수가 가지고 있는 주소를 비교하기에 0이 나온 것입니다.
그렇기에 값이 같더라도 그 값이 저장되어있는 주소는 다르다는 것입니다.
따라서 이런 문자열을 비교할 때는 strcmp를 사용하여야 합니다.
오늘은 문자열 함수에 대해 알아보았습니다. 다른 언어에서도 느끼지만 문자열과 관련된 함수는 많은 것 같습니다.
다음에는 포인터에 대해 알아보겠습니다.
댓글