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