?
This document uses PHP Chinese website manual Release
Defined in header <stdio.h> | ||
---|---|---|
char *gets( char *str ); | (until C11) | |
char *gets_s( char *str, rsize_t n ); | (since C11) (optional) |
1)讀stdin
入指向的字符數組,str
直到找到換行符或發(fā)生文件結束。在讀入數組的最后一個字符后立即寫入空字符。換行符被丟棄,但不存儲在緩沖區(qū)中。
2)讀取字符,stdin
直到找到換行符或發(fā)生文件結束。只將大部分n-1
字符寫入指向的數組中str
,并始終寫入終止空字符(除非str是空指針)。換行符(如果找到)將被丟棄,并且不計入寫入緩沖區(qū)的字符數。在運行時檢測到以下錯誤并調用當前安裝的約束處理函數:
n
是零
n
大于 RSIZE_MAX
str
是一個空指針
將n-1
字符存儲到緩沖區(qū)后,不會遇到endline或eof 。
無論如何,在調用約束處理程序之前,gets_s
首先完成讀取和放棄字符,stdin
直到換行符,文件結束條件或讀取錯誤。作為所有邊界檢查函數,gets_s
只有在被__STDC_LIB_EXT1__
實現定義__STDC_WANT_LIB_EXT1__
并且1
在包含之前用戶定義為整數常量時才能保證可用<stdio.h>
。
str | - | 要寫入的字符串 |
---|
str
成功時,NULL
失敗。
如果失敗是由文件結束條件引起的,則另外設置eof指示符(參見feof()
)stdin
。如果故障是由其他錯誤引起的,請設置錯誤指示器(參見ferror()
)stdin
。
該gets()
函數不執(zhí)行邊界檢查,因此該函數極易受緩沖區(qū)溢出攻擊的影響。它不能安全使用(除非程序在限制可能出現的內容的環(huán)境中運行stdin
)。出于這個原因,該功能在C99標準的第三勘誤中已被棄用,并在C11標準中完全刪除。fgets()
并且gets_s()
是推薦的替代品。
切勿使用 gets()
**。**
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獲取函數