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

NULL string

NULL pointer