if(input == "apple")
이 문장을 언뜻 보면 input 안에 있는 문자열과 "apple" 문자열을 비교한다고
생각하기 쉽지만 사실상 비교하는 것은 input 변수의 첫번째 주소와 "apple"
문자열이 임시로 저장된 메모리의 첫번째 주소를 비교하는 것입니다.
다시 말하면 input 변수의 시작번지가 0x1000 번지라면 input 변수는
a = 0x1000, p = 0x1001, p = 0x1002, l = 0x1003, e = 0x1004 , \0 = 0x1005
이런식으로 번지가 할당될 것이고
다음에 비교하기 위한 "apple" 문자열 값은 임의 메모리 번지에 할당이 됩니다.
예) a = 0x2000, p = 0x2001, p = 0x2002, l = 0x2003, e = 0x2004 , \0 = 0x2005
이런식이죠 ..
이 상태에서 if(input == "apple") 이것을 수행하면 실제적으로 CPU는
문자열 자체를 비교하는 것이 아니라 문자열의 첫번째 문자 주소값을 비교하게 됩니다.
if( 0x1000 == 0x2000 ) 이런식이 되겠죠.. 그러니 당연히 틀리다고 나오게 됩니다.
이럴때는 if(!strcmp(input,"apple")) printf("OK") ;
해 주시면 됩니다.
초보 님이 쓰신 글 :
: 텍스트 파일에 "apple pie"라는 문자열이 들어있습니다.
: 이걸
:
: char *input;
: FILE *fp;
:
: fp = fopen("input1.txt","r"); // 파일 열기
: while((input = fgetc(fp)) != ' '){
: printf("%s",&input);
: }
: if(input == "apple") printf("ok");
:
: 이런 코드로 읽어들였는데 화면엔 분명 apple라는 문자열이 표시되는데 if문으로 비교하면 ok 가 않나오는데 왜 그런건가요?
: 조언 부탁드립니다.
:
|