최근 ESP8266 이라는 와이파이 모듈의 명령어 처리를 하면서 문자열 함수들을 자주 사용하게 되어 정리 해본다.
문자열 라이브러리는 <string.h> 를 불러와 사용한다.
아래 함수들은 직접 구현 가능하지만 이미 구현되어 있는 것을 사용하는 것이 효율적이기에 사용하면 편리하다.
주어진 문자열의 길이를 반환하는 함수이다.
💡 영어의 경우 정상적으로 문자 하나당 1byte로 반환되어 길이 1로 되지만 utf-8, EUC-KR 에서 한글의 경우 글자 하나당 3 byte로 길이가 3으로 취급 된다.
size_t strlen(const char *s);
strcat() 함수는 첫번째 문자열에 두번째 문자열을 추가해 주는 함수이다.
💡 문자열 추가시 문자열의 길이가 선언된 배열의 크기보다 길면 오버플로우가 발생한다.
strncat() 함수는 strcat() 함수에 두번째 문자열의 복사 크기를 정해주는 인자가 추가된 함수이다.
마지막 인자 n은 두번째 문자열의 길이를 0번 인덱스부터 n-1 인덱스까지 복사하여 붙여 넣는다.
char *strcat(char * restrict s1, const char * restrict s2);
char *strncat(char * restrict s1, const char * restrict s2, size_t n);
strcpy() 함수는 첫번째 문자열에 두번째 문자열을 복사하는 함수이다.
💡 복사 될 문자열 즉 첫번째 문자열 보다 두번째 문자열의 길이가 길면 오버플로우가 발생한다.
strncpy() 함수는 strcpy() 함수에 세번째 인자가 추가된 것으로
세번째 인자는 복사할 문자열(두번째 문자열)의 길이를 지정할 수 있다.
char *strcpy(char * restrict s1, const char * restrict s2);
char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
문자열 전달시 문자열 포인터를 전달함으로 복사할 위치를 정할 수 있다.
char test_pattern[50] = "esp wifi communication test\r\n";
strncpy(test_pattern + 4, "8266", 4);
printf("%s", test_pattern);
실행 결과

strcmp() 함수는 첫번째 문자열과 두번째 문자열을 맨 앞순서부터 아스키코드 값으로 비교하는 함수이다.
첫번째 문자의 순서가 같으면 두번째 문자의 순서를 비교하고 이를 반복한다.
💡 첫번째 문자열이 두번째 문자열보다 크면 양수, 같으면 0, 작으면 음수를 반환한다.
strncmp() 함수는 strcmp() 함수에 세번째 인자가 추가된 것으로 비교할 문자의 개수를 지정한다.
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
해당 함수는 <stdio.h> 에 선언되어 있는 함수이다.
sprintf() 함수는 특정 문자열 형식으로 문자열로 저장해주는 함수이다.
buffer에 저장할 문자열이 담기고 format-string은 문자열이 저장될 형식을 지정한다.
이후 마지막 인자들은 format-string에 대응되는 형식을 가진다.
💡 문자열을 특정 패턴으로 출력 할 때 유용하다!
int sprintf(char *buffer, const char *format-string, argument-list);
문자열 전달시 문자열 포인터를 전달함으로 복사할 위치를 정할 수 있다.
아래 주석 코드 된 코드를 단 한줄로 줄 일 수 있었다.
int count = 1;
// char count_str[4];
char test_pattern[50];
int i;
while (count < 101)
{
// sprintf(count_str, "%d ", count);
sprintf(test_pattern, "%d esp wifi communication test\r\n", count);
// for(i = 0; i < strlen(count_str); i++)
// test_pattern[i] = count_str[i];
printf("%s", test_pattern);
count++;
}
문자열 라이브러리는 자주 활용되는 것은 그때그때 찾아서 잘 활용하면 좋을 것 같다!
다음의 링크를 참고했습니다.
TCPSCHOOL.com 문자열 처리 함수