當前位置:編程學習大全網 - 編程語言 - c語言編程中字符串復制函數編程程序出現錯誤,這是怎麽回事?

c語言編程中字符串復制函數編程程序出現錯誤,這是怎麽回事?

這裏原因是gets函數不安全,visual studio的後續產品已經不再支持此類函數,可以換成fgets(str1, sizeof(str1), stdin);

第壹個參數是,字符存儲地址,第二個是最大內存大小,第三個是從哪裏讀取,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函數接收掉回車符,這樣就不會出現任何問題了。

  • 上一篇:如何用Python編寫壹個素數環
  • 下一篇:軟件工程畢業後可以從事什麽工作
  • copyright 2024編程學習大全網