C언어 문자열 함수 정리

Ryan·2023년 11월 19일
0
post-thumbnail

최근 ESP8266 이라는 와이파이 모듈의 명령어 처리를 하면서 문자열 함수들을 자주 사용하게 되어 정리 해본다.

문자열 함수

문자열 라이브러리는 <string.h> 를 불러와 사용한다.

아래 함수들은 직접 구현 가능하지만 이미 구현되어 있는 것을 사용하는 것이 효율적이기에 사용하면 편리하다.

strlen() 함수

주어진 문자열의 길이를 반환하는 함수이다.

💡 영어의 경우 정상적으로 문자 하나당 1byte로 반환되어 길이 1로 되지만 utf-8, EUC-KR 에서 한글의 경우 글자 하나당 3 byte로 길이가 3으로 취급 된다.

함수 원형
size_t strlen(const char *s);

strcat(), strncat() 함수

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() 함수는 첫번째 문자열에 두번째 문자열을 복사하는 함수이다.

💡 복사 될 문자열 즉 첫번째 문자열 보다 두번째 문자열의 길이가 길면 오버플로우가 발생한다.

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(), strncmp() 함수

strcmp() 함수는 첫번째 문자열과 두번째 문자열을 맨 앞순서부터 아스키코드 값으로 비교하는 함수이다.
첫번째 문자의 순서가 같으면 두번째 문자의 순서를 비교하고 이를 반복한다.

💡 첫번째 문자열이 두번째 문자열보다 크면 양수, 같으면 0, 작으면 음수를 반환한다.

strncmp() 함수는 strcmp() 함수에 세번째 인자가 추가된 것으로 비교할 문자의 개수를 지정한다.

함수 원형
int strcmp(const char *s1, const char *s2); 
int strncmp(const char *s1, const char *s2, size_t n);  

번외) sprintf() 함수

해당 함수는 <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 문자열 처리 함수

profile
Seungjun Gong

0개의 댓글