Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[4484] Re:Re:감사합니다.. ^^ 그런데...
초보 [] 1376 읽음    2004-06-10 19:42
감사합니다..
그런거였군요..^^
그런데 실제로 실행을 시켜보니 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 가 않나오는데 왜 그런건가요?
: : 조언 부탁드립니다.
: :

+ -

관련 글 리스트
4482 파일을 읽어 문자열을 비교하는데... 초보 1624 2004/06/10
4483     Re:파일을 읽어 문자열을 비교하는데... 김시환 1431 2004/06/10
4484         Re:Re:감사합니다.. ^^ 그런데... 초보 1376 2004/06/10
4485             Re:Re:Re:감사합니다.. ^^ 그런데... 김시환 1351 2004/06/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.