문제 : if( Array[0] == NULL ) 구문에서 아래와같은 warning발생시 대처방법
warning: comparison between pointer and integer
소스 하단에 결과와, 해결방안을 정리했습니다.
--------------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
void main(void)
{
char temp[10];
char temp2[10];
char temp3[10];
char str[] = "hello";
int idx;
printf("\n ===================================================== \n");
printf("NULL printf [%d] [%c] \n\n", NULL, NULL);
printf("\n ===================================================== \n");
printf("[%s] strlen(str)[%d] sizeof(str)[%d] \n\n", str, strlen(str), sizeof(str));
for(idx = 0; idx < sizeof(str); idx++)
{
printf("str[%d] : [%c] \n\n", idx, str[idx]);
}
if(str[5] == 0)
printf("str[5] is 0 \n\n");
else
printf("str[5] is not 0 \n\n");
if(str[5] == '0')
printf("str[5] is '0' \n\n");
else
printf("str[5] is not '0' \n\n");
if(str[5] == '\0')
printf("str[5] is '\\0' \n\n");
else
printf("str[5] is not '\\0' \n\n");
if(str[5] == NULL)
printf("str[5] is NULL \n\n");
else
printf("str[5] is not NULL \n\n");
printf("\n ===================================================== \n");
memset(temp, 0x00, sizeof(temp));
if(temp[0] == 0)
printf("temp[0] (0x00으로 초기화했을때) is 0 \n\n");
else
printf("temp[0] (0x00으로 초기화했을때) is not 0 \n\n");
if(temp[0] == '0')
printf("temp[0] (0x00으로 초기화했을때) is '0' \n\n");
else
printf("temp[0] (0x00으로 초기화했을때) is not '0' \n\n");
if(temp[0] == '\0')
printf("temp[0] (0x00으로 초기화했을때) is '\\0' \n\n");
else
printf("temp[0] (0x00으로 초기화했을때) is not '\\0' \n\n");
if(temp[0] == NULL)
printf("temp[0] (0x00으로 초기화했을때) is NULL \n\n");
else
printf("temp[0] (0x00으로 초기화했을때) is not NULL \n\n");
printf("\n ===================================================== \n");
memset(temp2, 0x20, sizeof(temp2));
if(temp2[0] == 0)
printf("temp2[0] (0x20으로 초기화했을때) is 0 \n\n");
else
printf("temp2[0] (0x20으로 초기화했을때) is not 0 \n\n");
if(temp2[0] == '0')
printf("temp2[0] (0x20으로 초기화했을때) is '0' \n\n");
else
printf("temp2[0] (0x20으로 초기화했을때) is not '0' \n\n");
if(temp2[0] == '\0')
printf("temp2[0] (0x20으로 초기화했을때) is '\\0' \n\n");
else
printf("temp2[0] (0x20으로 초기화했을때) is not '\\0' \n\n");
if(temp2[0] == NULL)
printf("temp2[0] (0x20으로 초기화했을때) is NULL \n\n");
else
printf("temp2[0] (0x20으로 초기화했을때) is not NULL \n\n");
printf("\n ===================================================== \n");
if(temp3[0] == 0)
printf("temp3[0] (초기화하지 않고 선언만 했을때) is 0 \n\n");
else
printf("temp3[0] (초기화하지 않고 선언만 했을때) is not 0 \n\n");
if(temp3[0] == '0')
printf("temp3[0] (초기화하지 않고 선언만 했을때) is '0' \n\n");
else
printf("temp3[0] (초기화하지 않고 선언만 했을때) is not '0' \n\n");
if(temp3[0] == '\0')
printf("temp3[0] (초기화하지 않고 선언만 했을때) is '\\0' \n\n");
else
printf("temp3[0] (초기화하지 않고 선언만 했을때) is not '\\0' \n\n");
if(temp3[0] == NULL)
printf("temp3[0] (초기화하지 않고 선언만 했을때) is NULL \n\n");
else
printf("temp3[0] (초기화하지 않고 선언만 했을때) is not NULL \n\n");
printf("\n ===================================================== \n");
if(temp[0])
printf("temp[0] (비교없이 변수만으로 if문을 태웠을때) is true \n\n");
else
printf("temp[0] (비교없이 변수만으로 if문을 태웠을때) is false \n\n");
if(temp2[0])
printf("temp2[0] (비교없이 변수만으로 if문을 태웠을때) is true \n\n");
else
printf("temp2[0] (비교없이 변수만으로 if문을 태웠을때) is false \n\n");
if(temp3[0])
printf("temp3[0] (비교없이 변수만으로 if문을 태웠을때) is true \n\n");
else
printf("temp3[0] (비교없이 변수만으로 if문을 태웠을때) is false \n\n");
printf("[결론]\n");
printf("NULL은 string.h 에 숫자 0 으로 선언되어있다. \n");
printf("문자열의 끝에는 자동적으로 NULL문자가 삽입된다. \n");
printf("0(숫자) , '\\0'(NULL문자), NULL 은 모두 같은 동작을 한다 \n\n");
printf("if( Array[0] == NULL ) 과 같은 비교문은 아래와같은 warning 발생 \n");
printf("=> warning: comparison between pointer and integer \n\n");
printf("if( Array[0] == '\\0' ), if( Array[0] == 0 ), if( !Array[0] ) 으로 수정해서 warning을 해결할 수 있다 \n");
return;
}
댓글
댓글 쓰기