2016-04-08 13 views
-2

我對Quora的閱讀this問題和閱讀,谷歌問這個問題在採訪中,差異BTW得到和scanf(「%S」),函數getline

哪些功能之間的區別: scanf(「%s」),獲取和獲取

任何人都可以提供詳盡的列表和他們的解釋。

+0

http://stackoverflow.com/questions/314401/how-to-read-a-line-from-the-console-in-c –

回答

3

scanf("%s", &buffer);在輸入中讀取下一個令牌(任何空格/行結束/製表符將結束令牌)並將其存儲在char *buffer中。您應該使用最大大小的格式進行緩衝,例如使用char buffer[10]時,應該使用scanf("%9s", buffer);來讀取最多9個字符。

gets()已過時,請勿使用它。它讀取完整的行,不管它的大小如何,所以如果一個具有管理特權的程序使用這樣一個糟糕的功能,它可以被黑客用來穿透系統。這曾經是一種常見的黑客手段。請改爲使用fgets(),它會使用緩衝區大小的參數。 fgets(buffer, 10, stdin);與我之前的例子。請注意,如果該行不超過8個字符,則\n將包含在緩衝區中。

getline()更具體,因爲我知道它只是一個c++函數。

+3

['getline' available in C](http:// man7 .org/linux/man-pages/man3/getline.3.html),雖然它不是標準C.它是一個POSIX.1-2008函數 –