[42seoul] strnstr은 어떤 함수일까??

개발하는 곰댕이·2021년 4월 10일
0

42Seoul

목록 보기
25/45

include

#include <string.h>
char *strnstr(const char *haystack, const char *needle, size_t len);

매개변수

  • haystack
    문자열 needle이 들어있는지 찾을 대상이다.
  • needle
    우리가 찾아야 할 문자열이다.
  • len
    검사를 할 범위이다.

1. strnstr이란??

문자열 haystack에서 길이 len내에 needle이 있는지 검사를 하는 함수이다. 만약 찾았다면 찾은 지점의 포인터를 반환하고 만약 못 찾았다면 NULL을 반환한다. 그리고 또 우리가 찾아야 할 문자열이 빈 문자열이라면("\0") haystack을 그대로 반환해 준다.

2. 사용 예제


위 사진처럼 "123456123"에서 "456"을 찾고싶고, size는 넉넉하게 보냈다. 그러면 haystack의 모든 값들을 확인할테고 값을 하나씩 확인하면서 "456"과 동일하게 나열되어있는 문자열을 발견한다면 찾은 첫 번째 포인터인 '4'의 포인터를 반환해 준다. 그러면 우리가 찾고 싶은 "456"부터 시작된 문자열 "456123"을 받을 수 있게 된다.

만약 우리가 찾고싶은 문자열과 동일한 문자열이 없다면?? 당연히 NULL을 반환해 준다.

그럼 빈 문자열을 보내준다면?? haystack 그대로 반환해 준다.

마지막으로 haystack에 needle과 동일한 문자열인 "456"이 있지만 size가 작다면 NULL이 반환이 된다. 이유는 맨 앞 인덱스부터 우선 needle의 맨 앞 문자인 '4'를 찾는다. 그러고 찾았다면 그때부터 비교를 하기 시작하는데 이게 웬걸? "45"까지는 동일해서 다음 문자를 확인하려고 하는데 size가 작아서 더 이상 검사를 하지 못 한다. 그래서 strnstr에서는 "뭐야 난 456을 찾아야하는데 45까지밖에 없잖아?" 하고 NULL을 리턴하는 것이다.

3. 리턴값

위 내용처럼 haystack내에 needle이 있다면 haystack에 있는 needle의 시작점을 반환해주고 없다면 null을 리턴한다.

0개의 댓글