第壹個參數是,字符存儲地址,第二個是最大內存大小,第三個是從哪裏讀取,stdin是從鍵盤,也可以是文件指針表示從文件中讀取。
其實strcpy出現提示也是不安全的,可以考慮使用strncpy函數。
以下是擴展資料
C語言gets函數,fgets函數的使用
gets從標準輸入設備讀字符串函數。可以無限讀取,不會判斷上限,以回車結束讀取。函數的具體功能如下所示:從stdin流中讀取字符串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為‘\0’空字符,並由此來結束字符串。
使用gets函數的時候應註意以下要素:可以無限讀取,不會判斷上限,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字符將被寫入到堆棧中,破壞壹個或多個不相關變量的值。
這個事實導致gets函數只適用於玩具程序,為了避免這種情況,我們可以用fgets(stdin) 讀取標準輸入來替換gets()。為了向後兼容,gets刪除換行符,gets並不將換行符存入緩沖區。
fgets函數用來從文件中讀入字符串。fgets函數的調用形式如下:fgets(str,n,fp);此處,fp是文件指針;str是存放在字符串的起始地址;n是壹個int類型變量。函數的功能是從fp所指文件中讀入n-1個字符放入str為起始地址的空間內;如果在未讀滿n-1個字符之時,已讀到壹個換行符或壹個EOF(文件結束標誌),則結束本次讀操作,讀入的字符串中最後包含讀到的換行符。因此,確切地說,調用fgets函數時,最多只能讀入n-1個字符。讀入結束後,系統將自動在最後加'\0',並以str作為函數值返回。原型是char *fgets(char *s, int n, FILE *stream);
同時註意scanf函數和gets函數混用時的註意事項:
1、gets在scanf前調用,這種調用壹般不會出現什麽問題,可以正常輸入。
2、scanf在gets前調用,這種情況就會出現問題,當輸入完scanf中的變量時,運行到gets函數,則不讓輸入任何字符,出現此問題的原因是gets函數接收了scanf輸入完後的回車符,解決的辦法是在scanf和gets中間,用getchar函數接收掉回車符,這樣就不會出現任何問題了。