Namespaces
Variants

gets, gets_s

From cppreference.net
< c ‎ | io
헤더 파일에 정의됨 <stdio.h>
char * gets ( char * str ) ;
(1) (C11에서 제거됨)
char * gets_s ( char * str, rsize_t n ) ;
(2) (C11 이후)
1) stdin 에서 문자 배열 str 이 가리키는 위치로 개행 문자를 찾거나 파일 끝에 도달할 때까지 읽습니다. 배열에 마지막으로 읽은 문자 바로 뒤에 널 문자가 기록됩니다. 개행 문자는 버퍼에 저장되지 않으며 버려집니다.
2) 개행 문자를 찾거나 파일 끝에 도달할 때까지 stdin 에서 문자를 읽습니다. 최대 n - 1 개의 문자만 str 이 가리키는 배열에 기록하며, 항상 종료 널 문자를 기록합니다( str 이 널 포인터인 경우는 제외). 발견된 개행 문자는 버퍼에 기록된 문자 수에 포함되지 않으며 버려집니다.
다음 오류들은 런타임에 감지되며 현재 설치된 constraint handler 함수를 호출합니다:
  • n 이 0인 경우;
  • n RSIZE_MAX 보다 큰 경우;
  • str 이 null 포인터인 경우;
  • endline 또는 eof 가 버퍼에 n - 1 개의 문자를 저장한 후에도 발견되지 않는 경우.
어떤 경우든, gets_s 는 먼저 제약 조건 핸들러를 호출하기 전에 stdin 에서 개행 문자, 파일 끝 조건, 또는 읽기 오류가 발생할 때까지 문자들을 읽고 버리는 작업을 완료합니다.
모든 경계 검사 함수와 마찬가지로, gets_s 는 구현체가 __STDC_LIB_EXT1__ 를 정의하고 사용자가 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 으로 정의한 경우에만 사용 가능함이 보장됩니다. <stdio.h> 를 포함하기 전에 정의해야 합니다.

목차

매개변수

str - stdin 에서 읽은 문자들이 기록될 문자 배열
n - str 이 가리키는 배열에 기록될 수 있는 최대 문자 수

반환값

str 성공 시, 실패 시 널 포인터를 반환합니다.

실패가 파일 끝 조건에 의해 발생한 경우, 추가적으로 eof 표시자를 설정합니다( feof() 참조). 이는 stdin 에 적용됩니다. 실패가 다른 오류에 의해 발생한 경우, error 표시자를 설정합니다( ferror() 참조). 이는 stdin 에 적용됩니다.

참고 사항

gets() 함수는 경계 검사를 수행하지 않으므로, 이 함수는 버퍼 오버플로우 공격에 매우 취약합니다. 이 함수는 안전하게 사용할 수 없습니다( stdin 에 나타날 수 있는 내용을 제한하는 환경에서 프로그램이 실행되지 않는 한). 이러한 이유로, 이 함수는 C99 표준의 세 번째 정오표에서 사용이 중단되었으며 C11 표준에서는 완전히 제거되었습니다. fgets() gets_s() 가 권장되는 대체 함수입니다.

경고: 절대로 gets() 를 사용하지 마십시오 .

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • K.3.5.4.1 gets_s 함수 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • K.3.5.4.1 gets_s 함수 (p: TBD)
  • C11 표준 (ISO/IEC 9899:2011):
  • K.3.5.4.1 gets_s 함수 (p: 602-603)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.19.7.7 gets 함수 (p: 298)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.9.7.7 gets 함수

참고 항목

stdin , 파일 스트림 또는 버퍼에서 형식화된 입력을 읽음
(함수)
파일 스트림에서 문자열을 가져옴
(함수)
파일 스트림에 문자열을 씀
(함수)
구분자/줄 끝까지 스트림에서 자동으로 크기가 조정되는 버퍼로 읽음
(함수)