最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言gets()與fgets() 函數(shù)的區(qū)別

 更新時間:2025年12月18日 11:05:32   作者:侯小啾  
本文主要介紹了C語言gets()與fgets() 函數(shù)的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

使用要點:

  1. 永遠不要使用 gets()
  2. 總是使用 fgets() 替代 gets()
  3. 記得處理換行符
  4. 檢查返回值確保讀取成功
  5. 考慮輸入緩沖區(qū)清理

1.gets() 函數(shù)

基本用法:

char *gets(char *str);
  • 從標準輸入讀取一行字符串
  • 遇到換行符或文件結束符停止
  • 不檢查數(shù)組邊界,存在安全隱患

示例:

#include <stdio.h>

int main() {
    char name[20];
    printf("請輸入姓名:");
    gets(name);  // 危險!可能發(fā)生緩沖區(qū)溢出
    printf("你好,%s!\n", name);
    return 0;
}

?? gets() 的問題

  • 緩沖區(qū)溢出風險:如果輸入超過數(shù)組大小,會導致內存破壞
  • C11標準已棄用,C17標準中完全移除
  • 現(xiàn)代編譯器會給出警告

2.fgets() 函數(shù)(推薦使用)

基本用法:

char *fgets(char *str, int n, FILE *stream);
  • str:存儲字符串的緩沖區(qū)
  • n:最大讀取字符數(shù)(包括結尾的\0
  • stream:輸入流(stdin 表示標準輸入)

示例:

#include <stdio.h>

int main() {
    char name[20];
    
    printf("請輸入姓名:");
    fgets(name, sizeof(name), stdin);  // 安全!
    printf("你好,%s!\n", name);
    
    return 0;
}

3. 重要區(qū)別對比

特性gets()fgets()
安全性不安全,已棄用安全,推薦使用
邊界檢查有,指定最大長度
換行符處理丟棄換行符保留換行符在字符串中
返回值成功返回str,失敗返回NULL成功返回str,失敗返回NULL

4.fgets() 的換行符問題

fgets() 會保留換行符,需要手動處理:

#include <stdio.h>
#include <string.h>

int main() {
    char input[100];
    
    printf("輸入字符串:");
    fgets(input, sizeof(input), stdin);
    
    printf("處理前的字符串:%s\n",input);
    printf("===========\n");
    
    // 去除換行符
    size_t len = strlen(input);
    if (len > 0 && input[len-1] == '\n') {
        input[len-1] = '\0';
    }
    
    printf("處理后的字符串:'%s'\n", input);
    return 0;
}

執(zhí)行效果:

輸入字符串:abcd efgh ijklmn
處理前的字符串:abcd efgh ijklmn  

===========
處理后的字符串:'abcd efgh ijklmn'

(可以看到,處理前的字符串自帶有換行符。)

5. 實際使用示例

5.1 安全輸入示例:

#include <stdio.h>
#include <string.h>

void safe_input() {
    char buffer[50];
    
    printf("請輸入文本(最多%d字符):", sizeof(buffer)-1);
    
    if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
        // 去除換行符
        buffer[strcspn(buffer, "\n")] = '\0';
        
        printf("你輸入的是:%s\n", buffer);
        printf("字符串長度:%zu\n", strlen(buffer));
    } else {
        printf("讀取失?。n");
    }
}

int main() {
    safe_input();
    return 0;
}

執(zhí)行效果:

請輸入文本(最多49字符):hello,world!
你輸入的是:hello,world!
字符串長度:12

5.2 處理長輸入:

#include <stdio.h>

void clear_input_buffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

int main() {
    char line[10];
    
    printf("輸入字符串:");
    fgets(line, sizeof(line), stdin);
    
    // 檢查是否讀取了完整行
    if (line[strlen(line)-1] != '\n') {
        printf("警告:輸入被截斷!\n");
        clear_input_buffer();  // 清空輸入緩沖區(qū)
    }
    
    printf("結果:%s\n", line);
    return 0;
}

輸入字符串:hello, hello, hello, world!!!
警告:輸入被截斷!
結果:hello, he

到此這篇關于C語言gets()與fgets() 函數(shù)的區(qū)別的文章就介紹到這了,更多相關C語言gets()與fgets() 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在iOS中給視頻添加濾鏡的方法示例

    在iOS中給視頻添加濾鏡的方法示例

    這篇文章主要介紹了在iOS中給視頻添加濾鏡的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Qt無邊框窗口拖拽和陰影的實現(xiàn)

    Qt無邊框窗口拖拽和陰影的實現(xiàn)

    自定義窗口控件的無邊框,窗口事件由于沒有系統(tǒng)自帶邊框,無法實現(xiàn)拖拽拉伸等事件的處理,本文主要介紹了Qt無邊框窗口拖拽和陰影的實現(xiàn),感興趣的可以了解一下
    2024-01-01
  • CMake中使用vcpkg的實現(xiàn)

    CMake中使用vcpkg的實現(xiàn)

    本文主要介紹了CMake中使用vcpkg的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C++歸并排序算法實例

    C++歸并排序算法實例

    這篇文章主要介紹了C++歸并排序算法實例,本文先是介紹了什么是歸并排序,然后給出了實現(xiàn)代碼,需要的朋友可以參考下
    2014-10-10
  • C語言三個函數(shù)的模擬實現(xiàn)詳解

    C語言三個函數(shù)的模擬實現(xiàn)詳解

    這篇文章主要為大家詳細介紹了C語言三個函數(shù)的模擬實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言中聯(lián)合體與共用體和枚舉使用語法示例

    C語言中聯(lián)合體與共用體和枚舉使用語法示例

    這篇文章主要介紹了C語言中聯(lián)合體與共用體和枚舉使用語法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • C++實現(xiàn)String與UF8互轉

    C++實現(xiàn)String與UF8互轉

    這篇文章介紹了C++實現(xiàn)String與UF8互轉的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C++函數(shù)重載詳解及實例代碼

    C++函數(shù)重載詳解及實例代碼

    這篇文章主要介紹了C++函數(shù)重載詳解及實例代碼的相關資料,需要的朋友可以參考下
    2016-09-09
  • c++ 如何在libuv中實現(xiàn)tcp服務器

    c++ 如何在libuv中實現(xiàn)tcp服務器

    這篇文章主要介紹了c++ 如何在libuv中實現(xiàn)tcp服務器,幫助大家更好的理解和使用libuv,感興趣的朋友可以了解下
    2021-02-02
  • C語言實現(xiàn)車輛出租管理系統(tǒng)

    C語言實現(xiàn)車輛出租管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)車輛出租管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

蒲江县| 榆中县| 安陆市| 陆川县| 临洮县| 松溪县| 灵璧县| 余姚市| 昆山市| 吉水县| 金坛市| 睢宁县| 莎车县| 黑龙江省| 黎川县| 开鲁县| 辛集市| 新源县| 随州市| 大足县| 无为县| 申扎县| 凤城市| 泾川县| 武定县| 越西县| 桃江县| 额尔古纳市| 邹平县| 洪江市| 兰西县| 洪江市| 西和县| 礼泉县| 晋江市| 北碚区| 柳林县| 原平市| 临西县| 康平县| 罗山县|