Search
Duplicate
🕔

NULL string & NULL pointer & NULL character

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Scrap
태그
9 more properties
libft 과제중 알게되었던 개념인데, 누구나 한번쯤 헷갈릴 법 하다고 생각한다.
이번 기회에 확실히 정리하고 앞으로는 헷갈리지 말자.
libft 테스터기를 돌리던 중 아래와 같은 문제가 발생하였다.
[no crash]: your strnstr does not segfault when null parameter is sent Test code: ft_strnstr("fake", ((void *)0), 3);
Shell
복사
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); }
C
복사
if (needle == NULL) return ((char *)haystack); // 따라서 이렇게 쓰는 것이 맞다.
C
복사

결론

char *a = “”; // NULL string char *b = NULL; // NULL pointer char *c = '0'; // NULL character
C
복사

NULL string

비어있는 문자열
빈 문자열은 문자열 객체가 실제로 있으며, 그 내용이 ""인 경우.
따라서 문자열의 주소값도 존재한다.
빈 문자열은 길이가 0

NULL pointer

NULL pointer의 주소는 0번지 이다. ⇒ (void *)0
어떤 객체를 가리키는 이름표, 즉 변수는 있는데 가리키는 대상이 없는 경우.

NULL character

말 그대로 변수에 저장된 값이 아스키값으로 0.

ref )

코린이의 첫글이라 많이 부족합니다.
틀린 부분 보이시면 댓글로 알려주시면 너무 감사할 것 같습니다!