감사합니다..
그런거였군요..^^
그런데 실제로 실행을 시켜보니 ok표시가 되지 않습니다.
if(!strcmp(&input,"apple")) printf("OK") ;
그래서 이리저리 해보다가
fgets(&input,6,fp);
if(!strcmp(&input,"apple")) printf("ok");
fgets로 읽어서 비교하니 ok가 나오는군요..
while((input = fgetc(fp)) != ' ')로 읽어들인것과 fgets로 읽어들인것의 차이점은 무었인가요?
김시환 님이 쓰신 글 :
: 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 가 않나오는데 왜 그런건가요?
: : 조언 부탁드립니다.
: :
|