libft 과제중 알게되었던 개념인데, 누구나 한번쯤 헷갈릴 법 하다고 생각한다.
이번 기회에 확실히 정리하고 앞으로는 헷갈리지 말자.
libft 테스터기를 돌리던 중 아래와 같은 문제가 발생하였다.
[no crash]: your strnstr does not segfault when null parameter is sent
Test code: ft_strnstr("fake", ((void *)0), 3);
char *ft_strnstr(const char *haystack, const char *needle, size_t len)
{
if (len == 0)
return (0);
if (!needle) // needle이 (void *)0 일때, !(0번지 주소)라는 뜻인데 이런 연산은 불가능하다
return ((char *)haystack);
if (ft_strlen(haystack) < ft_strlen(needle))
return (0);
while (len - ft_strlen(needle) + 1)
{
if (ft_strncmp(haystack, needle, ft_strlen(needle)) == 0)
return ((char *)haystack);
haystack++;
len--;
}
return (0);
}
if (needle == NULL)
return ((char *)haystack); // 따라서 이렇게 쓰는 것이 맞다.
char *a = “”; // NULL string
char *b = NULL; // NULL pointer
char *c = '0'; // NULL character
""
인 경우.