C언어/string.h

[C언어] strstr 함수 (문자열 검색 함수)

아무일도없었다 2022. 9. 14. 13:58

사용범위

Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수

기능

C언어 표준 함수로 문자열안에서 특정 문자열을 검색할 때 사용한다.

헤더

#include <string.h>

※ strstr 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※


함수

char* strstr(const char* str, const char* substr);

파라미터

  • const char* str
    • 검색을 진행할 문자열을 입력한다.
    • NULL 문자 (\0) 가 나올 때까지 str 의 내용을 검색한다.
    • 반드시 유효한 주소값을 입력해야 하고 유효하지 않은 주소 입력 시 signal 이 발생한다.
  • const char* substr
    • str 문자열에서 검색하려는 sub string 을 입력한다.
    • substr 은 반드시 NULL 문자 (\0) 로 종료되어야 한다.
    • 반드시 유효한 주소값을 입력해야 하고 유효하지 않은 주소 입력 시 signal 이 발생한다.

 


반환값

str 에서 substr 을 찾은 경우 : str 기준으로 첫 번째 substr 의 위치를 포인터로 반환
str 에서 substr 을 찾지 못한 경우 : NULL(0) 반환

NULL 이 아닌 경우 str 에 substr 문자열 존재한다.
NULL 인 경우 str 에 substr 문자열이 존재하지 않는다.

 


잡학지식

strstr 함수는 문자열 버퍼에서 특정 substring 이 포함되는지 혹은 어느 위치에 있는지 검색하는데 주로 사용이 된다.

 

strstr 함수는 내부적으로 str 로부터 순차적으로 substring 을 검색해서 찾은 substring 의 위치를 포인터로 반환한다.

 

따라서 strstr 에 특정 substring 이 여러 개 있는 경우 반환 값을 받아서 strstr 로 다시 검색하는 코드를 사용한다면, 순차적으로 substring 에 접근하거나 몇 개의 substring 이 존재하는지 체크할 수 있다. (이 외에도 많은 방식으로 사용된다.)


 

<소스 코드>

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

#define SUBSTRING "str"

int main() {
    char buffer[] = "Search string function 'strstr'";
    char *ret;

    ret = strstr(buffer, "Hello");

    if (ret == NULL) {
        printf("Not Found Substring(Hello)\n");
    } else {
        printf("Found Substring(Hello), addr[%p]\n", ret);
    }

    printf("buffer address[%p]\n", buffer);

    // buffer 를 기준으로 'str' 문자 검색
    ret = strstr(buffer, SUBSTRING);
    while(ret != NULL) {
        printf("Found '%s' string [%p](%s)\n", SUBSTRING, ret, ret);
        
        // 이미 검색된 'str' 문자열 다음부터 재검색
        ret = strstr(ret + strlen(SUBSTRING), SUBSTRING);
    }

    return 0;
}

 

※ 실행 결과

Not Found Substring(Hello)
buffer address[000000000061FDC0]
Found 'str' string [000000000061FDC7](string function 'strstr')
Found 'str' string [000000000061FDD8](strstr')
Found 'str' string [000000000061FDDB](str')

 

반응형