分享方式:


gets, _getws

stdin 資料流取得行。 這些函式已有更安全的版本可用,請參閱 gets_s_getws_s

重要

這些函式已被取代。 自 Visual Studio 2015 起,這些函式即無法在 CRT 中使用。 這些函 gets_s 式和 _getws_s的安全版本仍可供使用。 如需這些替代函式的詳細資訊,請參閱 gets_s_getws_s

重要

這個 API 不能用於在 Windows 執行階段中執行的應用程式。 如需詳細資訊,請參閱 CRT functions not supported in Universal Windows Platform apps (通用 Windows 平台應用程式中不支援的 CRT 函式)。

語法

char *gets(
   char *buffer
);
wchar_t *_getws(
   wchar_t *buffer
);
template <size_t size>
char *gets(
   char (&buffer)[size]
); // C++ only
template <size_t size>
wchar_t *_getws(
   wchar_t (&buffer)[size]
); // C++ only

參數

buffer
輸入字串的儲存體位置。

傳回值

若成功,即傳回其引數。 NULL 指標表示錯誤或檔案結尾條件。 使用 ferrorfeof 來判斷發生哪一個。 如果 bufferNULL,這些函式會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會傳回 NULL,並將 errno 設為 EINVAL

備註

gets 函式會從標準輸入資料流 stdin 讀取一行,並將其儲存在 buffer中。 此行包括到第一個新行字元 ('\n') (含) 的所有字元。 gets 接著會取代以 null 字元 ('\0') 取代新行字元,然後再傳回該行。 相反地,fgets 函式則會保留新行字元。 _getwsgets 的寬字元版本;其引數與傳回值為寬字元字串。

重要

由於無法限制 所 gets讀取的字元數,因此不受信任的輸入很容易造成緩衝區滿溢。 請改用 fgets

在 C++ 中,這些函式具有樣板多載,可以叫用這些函式的更新且安全的對應版本。 如需詳細資訊,請參閱安全範本多載

根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態

一般文字常式對應

TCHAR.H 常式 _UNICODE_MBCS 未定義 _MBCS 已定義 _UNICODE 已定義
_getts gets gets _getws

需求

常式 必要的標頭
gets <stdio.h>
_getws <stdio.h><wchar.h>

如需相容性詳細資訊,請參閱相容性

範例

// crt_gets.c
// compile with: /WX /W3

#include <stdio.h>

int main( void )
{
   char line[21]; // room for 20 chars + '\0'
   gets( line );  // C4996
   // Danger: No way to limit input to 20 chars.
   // Consider using gets_s instead.
   printf( "The line entered was: %s\n", line );
}

輸入超過 20 個字元將會超過行緩衝區,而且幾乎可以肯定導致程式當機。


Hello there!The line entered was: Hello there!

另請參閱

資料流 I/O
fgets, fgetws
fputs, fputws
puts, _putws