include
#include <string.h> char *strnstr(const char *haystack, const char *needle, size_t len);
매개변수
- haystack
문자열 needle이 들어있는지 찾을 대상이다.- needle
우리가 찾아야 할 문자열이다.- len
검사를 할 범위이다.
문자열 haystack
에서 길이 len내에 needle이 있는지
검사를 하는 함수이다. 만약 찾았다면 찾은 지점의 포인터를 반환하고 만약 못 찾았다면 NULL
을 반환한다. 그리고 또 우리가 찾아야 할 문자열이 빈 문자열
이라면("\0") haystack을 그대로 반환
해 준다.
위 사진처럼 "123456123"에서 "456"
을 찾고싶고, size는 넉넉
하게 보냈다. 그러면 haystack의 모든 값
들을 확인할테고 값을 하나씩 확인하면서 "456"과 동일
하게 나열되어있는 문자열을 발견한다면 찾은 첫 번째 포인터인 '4'의 포인터를 반환
해 준다. 그러면 우리가 찾고 싶은 "456"부터 시작된 문자열 "456123"을 받을 수 있게 된다.
만약 우리가 찾고싶은 문자열과 동일한 문자열이 없다면?? 당연히 NULL을 반환해 준다.
그럼 빈 문자열을 보내준다면?? haystack 그대로 반환해 준다.
마지막으로 haystack에 needle과 동일한 문자열인 "456"이 있지만 size가 작다면 NULL이 반환이 된다.
이유는 맨 앞 인덱스부터 우선 needle의 맨 앞 문자인 '4'를 찾는다. 그러고 찾았다면 그때부터 비교를 하기 시작하는데 이게 웬걸? "45"까지는 동일해서 다음 문자를 확인하려고 하는데 size가 작아서 더 이상 검사를 하지 못 한다. 그래서 strnstr에서는 "뭐야 난 456을 찾아야하는데 45까지밖에 없잖아?" 하고 NULL을 리턴하는 것이다.
위 내용처럼 haystack내에 needle이 있다면 haystack에 있는 needle의 시작점을 반환해주고 없다면 null을 리턴한다.