사용범위
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')
반응형
'C언어 > string.h' 카테고리의 다른 글
[C언어] memccpy 함수 (특정 문자까지만 메모리 복사) (1) | 2022.09.16 |
---|---|
[C언어] strcat 함수 (문자열 연결) (0) | 2022.09.15 |
[C언어] strlen 함수 (문자열 길이 확인 함수) (0) | 2022.09.14 |
[C언어] strcmp 함수 (문자열 비교 함수) (2) | 2022.09.13 |
[C언어] strcpy 함수 (문자열 복사, string copy) (0) | 2022.09.09 |