목록fgets (2)
살아가는 이야기
C의 gets는 매우 사용하기 편리하지만, 초기 설계의 문제로 인해 버퍼 오버플로(buffer overflow: 지정한 영역을 넘어 기록하는 현상)가 발생한다는 치명적 오류가 있다. 그래서 지속적으로 지원 중단 예정(deprecated) 함수로 지정되었다가 C11 이후로는 아예 지원되지 않는다. 문제는 이전에 gets를 이용하여 사용하던 코드의 경우 다시 작성해야 하는데, 이때 fgets를 사용해야 한다. fgets의 프로토타입은 다음과 같다. char *fgets(char *버퍼, size_t 크기, FILE *입력스트림); 따라서 gets로 다음과 같이 작성된 코드가 있다고 하면 gets(line); 다음과 같이 다시 작성해야 한다. fgets(line, sizeof line, stdin); 다만 줄..
표준입력(stdin)에서 행 단위로 읽으려면 fgets를 사용한다. 과거 사용하던 gets는 버퍼 넘침(buffer overflow) 문제로 인해 더 이상 사용하지 않는다. fgets의 인수는 fgets(버퍼, 크기, 스트림) 형식으로 사용하는데, 우리말 순서로는 인수 순서가 잘 이해되지 않지만 영어 순서로는 "get a string into 버퍼 with 크기 from 스트림"으로 읽을 수 있으므로 뜻이 통한다. 헷갈리는 것은 버퍼와 스트림 순서인데, strcpy(버퍼, 소스)의 순서처럼 우측 끝 인수가 소스(source)라고 생각하면 기억하기 쉽다. #include int main() { char line[BUFSIZ]; int sz = sizeof line, lineno = 0; while (fge..