[질문] 배열에 NULL문자 삽입 질문드립니다
int main(void)
{
char persona[10], personb[10];
person_a[0] = '\0';
person_b[0] = NULL;
여기서 왜 '\0'은 아무런 경고메시지가 나오지 않는데 NULL의 경우, 빌드는 성공하지만
warning C4047: '=': 'char'의 간접 참조 수준이 'void *'과(와) 다릅니다.
이런 경고가 나오는걸까요?
scanf로 받은 문자열을 strcmp로 동일한지 확인을 하려고 하니 NULL문자로 배열이 끝나지 않을 수도 있다면서 C6054가 나오기에 NULL문자를 넣어주니 경고가 떠서 질문드립니다.
NULL이랑 '\0'은 다른건가요?
안녕하세요.
말씀하신 것과 같이 NULL과 '\0'은 다릅니다. 물론 '\0'을 null or string terminator라고 잃지만, 이는 정확히 이야기 하면 character null 입니다.
warning C4047: '=': 'char'의 간접 참조 수준이 'void *'과(와) 다릅니다.
이 의미도 해석을 해보면 왼쪽의 변수는 char형인데 대입하려는 NULL의 자료형이 정해져 있지 않다는 warning입니다.
NULL은 조금 일반적인 의미의 null이라고 보시면 되구요, 그 상황에 맞는 정확한 값을 쓰는 것이 더 좋습니다.
"NULL이랑 '\0'은 다른건가요?" 라고 질문을 해주셨는데요
ASCII 코드값으로 비교하면 쉽습니다
NULL - 0x00 or 0x0000 (ASCII vs 2byte unicode)
'\0' - 0x00 널값을 나타냄
'0' - 0x20 (ASCII) 숫자 0 을 나타냄
즉 , 질문하신 NULL 이랑 \0 은 같은거라고 보시면 됩니다만,
NULL 은 헤더파일에 정의된 매크로로 null pointer constant입니다
즉, 주소값입니다
그래서 person_b[0] = NULL; 은 /0 과 같은 값을 넣어줘야 하는데
NULL 주소값을 대입하게 되는것이므로 오류가 생기는것입니다