gets, gets_s
|
헤더 파일에 정의됨
<stdio.h>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(1) | (C11에서 제거됨) |
|
char
*
gets_s
(
char
*
str, rsize_t n
)
;
|
(2) | (C11 이후) |
- 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 함수
참고 항목
|
(C11)
(C11)
(C11)
|
stdin
, 파일 스트림 또는 버퍼에서 형식화된 입력을 읽음
(함수) |
|
파일 스트림에서 문자열을 가져옴
(함수) |
|
|
파일 스트림에 문자열을 씀
(함수) |
|
|
(dynamic memory TR)
|
구분자/줄 끝까지 스트림에서 자동으로 크기가 조정되는 버퍼로 읽음
(함수) |
|
C++ documentation
for
gets
|
|