두 사람이 이미이 문제의 일부를 지적했습니다. 나는 확실히 gets
을 사용하는 것이 형편없는 생각이라고 동의합니다.
나는 다른 세부 사항을 언급 할 가치가 있다고 생각한다 : 이것은 루프를 종료하기위한 조건으로 feof(file)
을 사용하기 때문에 파일의 끝에서 오류가 발생하면/또한 오동작 할 수있다. 오류가 발생하면 오류 플래그가 설정되지만 (일반적으로) EOF 플래그는 표시되지 않으며 파일에서 더 이상 읽을 수 없으므로 (오류로 인해) 결코 둘 중 하나가 될 수 없으므로 무한 루프가 될 것입니다.
작업을 수행하는 올바른 방법은 fgets
로하고, 반환 값 확인 : fgets
는 파일 읽기에을 성공을위한
while (fgets(s, length_of_s, stdin))
process(s);
이 테스트를, 그래서 그것을 위해 루프를 종료 것 중 하나 파일 또는 끝 부분에 오류가 있습니다.
한 기타 사소한 세부 사항 : fgets
문자열을 읽을 때 정상적으로 는 (gets
그것을 버린다) 줄 끝에 새로운 라인을 유지한다. 아마도 줄 바꿈을 제거하기 위해 더 많은 코드를 추가해야 할 것입니다 (줄 바꿈이없는 경우 할당 한 버퍼보다 긴 줄을 처리 할 수도 있습니다).
1990 년 이후에'gets '를 사용하는 책/가이드가 발견되면 구워야합니다. 저자는 무능하고 예제를 읽으면 매우 나쁜 습관을 갖게 될 것입니다 ... –
@R .. Beej의 가이드는 @ 왕의 잔학 행위이며 interwebs에서 문질러 줘야하며 따옴표로 묶인 코드는 자신의 전시회 A 여야합니다. 헤이그에서의 자본 재판. – tbert
와우, 정말 그렇게 나빴어. –