leejun332211   2년 전


문제의 직접적 질문은 아니지만 기초적인 질문 ...

문제를 많이 풀다보니 기초가 부족함을 알고 혼자 여기저기 찾았지만
어려워서.. 몇가지를 고수님께 질문드립니다.

모든것은 c언어에서 string.h를 제외하고 생각하겠습니다.

많은 도움 바랍니다 죄송합니다...


===================첫질문..===================
char str[101];
scanf("s",str);

이런상황에서 입력을 okay로 받았습니다.

스트림에는 okay\n 가들어왔는데
\n때고 okay가 str에 박힙니다.
그러면 str[0]=='o' str[1]=='k' str[2]=='a' str[3]=='y'
일텐데

1. str[4]는 무엇인지 ....

2. if(str=="okay)할때, 왜 okay라고 비교했을때 같다가 안되는지...

3. 보통 gets();로 받을때는 문자열 마지막에 \n으로 끝남을 확인할수있는데
   scanf로 받은경우는 문자가 끝난다 판단을 어떻게 하는지....
   (저는 초기에 문자열을 char str[101]={};처럼 null 로 초기화하고 null이나오면 끝났다라고
    판단하는데 그게 맞는지..)


==================두번째질문=======================

char str[101]={};

bupjae   2년 전

  1. str[4] 에는 NUL (ascii code 0) 이 들어갑니다. C언어에서는 "문자열"의 끝을 이 NUL 글자로 판단합니다.
  2. 이와 같이 비교문을 쓰면 str 이 가리키는 주소와 "okay" 문자열이 가리키는 주소를 비교하게 되므로 원하는 결과가 나오지 않습니다. C에서 문자열의 비교는 strcmp 함수를 사용해야 합니다.
  3. 답변은 1번과 동일합니다. scanf는 C언어의 규칙대로 입력받은 문자열의 맨 마지막에 NUL 글자를 추가합니다.

댓글을 작성하려면 로그인해야 합니다.