아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
지적인웜뱃3
지적인웜뱃320.11.03

[질문] 배열에 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'은 다른건가요?


55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 안녕하세요.

    말씀하신 것과 같이 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 주소값을 대입하게 되는것이므로 오류가 생기는것입니다