• <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>
  • 推廣 熱搜: csgo  vue  angelababy  2023  gps  新車  htc  落地  app  p2p 

    C 輸入 & 輸出

       2023-08-27 網絡整理佚名1610
    核心提示:讀取的換行符被轉換為null值,做為字符數組的最后一個字符,來結束字符串。其中str為數組首地址,(str)為數組大小,stdin表示我們從鍵盤輸入數據。注意:調用fgets函數時,最多只能讀入n-1個字符。如果不能正確使用gets()函數,帶來的危害是很大的,就如上面我們看到的,輸入字符串的長度大于緩沖區長度時,并沒有截斷,原樣輸出了讀入的字符串,造成程序崩潰。

    gets() 和 fgets() gets()

    獲取函數原型:char*gets(char*);//讀取字符數組:gets(str); str 是數組名稱。

    獲取函數功能:從鍵盤輸入字符,收到換行符或EOF時停止,并將讀取結果存放到指針指向的字符數組中。

    讀取的換行符將轉換為空值作為字符數組的最后一個字符以終止字符串。

    注意:由于gets函數沒有指定輸入字符大小,因此會無限讀取。 一旦輸入的字符大于數組的長度,內存就會越界。

    導致程序崩潰或者其他數據錯誤。

    fgets()

    fgets函數原型: char *fgets(char *s, int n, FILE *);//我們通??梢赃@樣使用:fgets(str, (str), stdin);

    其中,str是數組的首地址,(str)是數組的大小,stdin表示我們從鍵盤輸入數據。

    fgets函數的作用:從文件指針中讀取字符,存放到以s開頭的空間中,直到讀完N-1個字符,或者讀到一行。

    注意:調用fgets函數時,最多只能讀取n-1個字符。 讀取后系統會自動在末尾添加'\0'并返回str作為函數值。

    借用教程示例,我將 char str[100] 更改為 char str[5]

    #include 
    int main( )
    {
        char str[5];
        printf( "Enter a value :");
        gets( str );
        printf( "\nYou entered: ");
        puts( str );
        return 0;
    }
    

    如果輸入123(長度小于5),結果為:

    Enter a value :123
    You entered: 123

    如果輸入(長度大于5)結果為:

    Enter a value :123456789
    You entered: 123456789
    

    雖然顯示正常,但系統提示程序崩潰

    如果gets()函數不能正確使用,危害將會很大。 上面我們看到,當輸入字符串的長度大于緩沖區的長度時,不會被截斷,讀取的字符串會原樣輸出。 導致程序崩潰。

    考慮到程序的安全性和健壯性,建議使用fgets()而不是gets()。 喜歡:

    #include 
    int main( )
    {
        char str[5];
        printf( "Enter a value :");
        fgets( str,5,stdin );      //fgets()函數;
        printf( "\nYou entered: ");
        puts( str );
        return 0;
    }
    

    183***

    參考地址

     
    標簽: fgets 字符 char 數組
    反對 0舉報 0 收藏 0 打賞 0評論 0
     
    更多>同類資訊
    推薦圖文
    推薦資訊
    點擊排行
    網站首頁  |  關于我們  |  聯系方式  |  使用協議  |  版權隱私  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報
    Powered By DESTOON
     
    三级精品影视国产,欧美乱伦免费综合,亚洲a在线中文,人妻色综合网站
  • <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>