열혈c에 나오는거 같은데 책이 틀린거같아성ㅅ
일단 책내용 대충올립니다 대충 봐주세여
문자열을 입력 받으면 문자열의 끝에 자동으로 널 문자가 추가된다.
int main ()
{
char str[7];
int i;
for(i=0; i<3 ; i++) {
fgets(str, sizeof(str), stdin);
printf("Read %d : %sn", i+1, str);
}
return 0 ;
}
실행결과1
12345678901234567890
Read 1: 123456
Read 2: 789012
Read 3: 345678
그럼 이번에는 문자열의 길이를 5로 제한해서(6이 아니고 5인 이유는 잠시 후에 알게 된다.)
다음과 같이 키보드를 통한 입력이 총 3회 이뤄지도록 하자.
실행결과2
We
Read 1: We
like
Read 2: like
you
read 3: you
개행을 제외시키거나 버리지 않고 문자열의 일부로 받아들인다.
여기까지고 .. 실행결과 2가 틀린거 아닌가요?
제가 이해한대로라면 문자열의길이가 5라면 like를 입력하면 널문자를 포함해야되서 개행이 저장이 안되고 다음으로 넘어가서
실행결과2와 같이 안나오고 그림과 같이 나오는게 맞는거아닌가요? 실제로도 그렇게 나오구여..
엉 짤방이 맞음
열혈강의C가 이래서 문제다. 설명이 애매모호하기 짝이 없음
맞지...ㅇㅅㅇ근데 그건 왜?
버퍼의 길이가 6이라 가정해야 하는거 아닌가? \"like\\n\"을 저장하려면 6바이트가 필요하거덩.
\"like\\n\"의 길이는 분명히 5잖아. 니가 짠 소스가 이상한거 아니냐
글쓴이 말이 맞다. fgets 의 두번째 파라미터의 n 은 버퍼의 길이 이고, fgets은 n-1 크기만큼만 읽고, 끝에 null character(\'\\0\') 를 붙여.
글쓴이가 제대로 알고있긴 한데 설명하는 방법이 병신이다.
아, 글쓴이가 아니고 윤성우
그럼, like
\"like\\n\"의 길이가 5인건 어떻게 설명하지? 문자열의 길이를 5로 제한한다며
문자열의 길이를 5로 제한하도록 한다는게, 버퍼의 길이를 6으로 지정하라는 소리일 것이다 이말이지.