精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在 C 語言中安全地讀取用戶輸入

開發
getline() 提供了一種更靈活的方法,可以在不破壞系統的情況下將用戶數據讀入程序。

在 C 語言中讀取字符串是一件非常危險的事情。當讀取用戶輸入時,程序員可能會嘗試使用 C 標準庫中的 gets 函數。它的用法非常簡單:

char *gets(char *string);

gets() 從標準輸入讀取數據,然后將結果存儲在一個字符串變量中。它會返回一個指向字符串的指針,如果沒有讀取到內容,返回 NULL 值。

舉一個簡單的例子,我們可能會問用戶一個問題,然后將結果讀入字符串中:

#include <stdio.h>
#include <string.h>
int main()
{
  char city[10]; // 例如 "Chicago"
  // 這種方法很糟糕 .. 不要使用 gets
  puts("Where do you live?");
  gets(city);
  printf("<%s> is length %ld\n", city, strlen(city));
  return 0;
}

輸入一個相對較短的值就可以:

Where do you live?
Chicago
<Chicago> is length 7

然而,gets() 函數非常簡單,它會天真地讀取數據,直到它認為用戶完成為止。但是它不會檢查字符串是否足夠容納用戶的輸入。輸入一個非常長的值會導致 gets() 存儲的數據超出字符串變量長度,從而導致覆蓋其他部分內存。

Where do you live?
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
<Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch> is length 58
Segmentation fault (core dumped)

最好的情況是,覆蓋部分只會破壞程序。最壞的情況是,這會引入一個嚴重的安全漏洞,惡意用戶可以通過你的程序將任意數據插入計算機的內存中。

這就是為什么在程序中使用 gets() 函數是危險的。使用 gets(),你無法控制程序嘗試從用戶讀取多少數據,這通常會導致緩沖區溢出。

安全的方法

fgets() 函數歷來是安全讀取字符串的推薦方法。此版本的 gets() 提供了一個安全檢查,通過僅讀取作為函數參數傳遞的特定數量的字符:

char *fgets(char *string, int size, FILE *stream);

fgets() 函數會從文件指針讀取數據,然后將數據存儲到字符串變量中,但最多只能達到 size 指定的長度。我們可以更新示例程序來測試這一點,使用 fgets() 而不是 gets()

#include <stdio.h>
#include <string.h>
int main()
{
    char city[10]; // 例如 "Chicago"
    puts("Where do you live?");
    // fgets 雖好但是并不完美
    fgets(city, 10, stdin);
    printf("<%s> is length %ld\n", city, strlen(city));
    return 0;
}

如果編譯運行,你可以在提示符后輸入任意長的城市名稱。但是,程序只會讀取 size = 10 數據存儲到字符串變量中。因為 C 語言在字符串末尾會添加一個空(\0)字符,這意味著 fgets() 只會讀取 9 個字符到字符串中。

Where do you live?
Minneapolis
<Minneapol> is length 9

雖然這肯定比 fgets() 讀取用戶輸入更安全,但代價是如果用戶輸入過長,它會“切斷”用戶輸入。

新的安全方法

更靈活的解決方案是,如果用戶輸入的數據比變量可能容納的數據多,則允許字符串讀取函數為字符串分配更多內存。根據需要調整字符串變量大小,確保程序始終有足夠的空間來存儲用戶輸入。

getline() 函數正是這樣。它從輸入流讀取輸入,例如鍵盤或文件,然后將數據存儲在字符串變量中。但與 fgets() 和 gets() 不同,getline() 使用 realloc() 調整字符串大小,確保有足夠的內存來存儲完整輸入。

ssize_t getline(char **pstring, size_t *size, FILE *stream);

getline() 實際上是一個名為 getdelim() 的類似函數的裝飾器,它會讀取數據一直到特殊分隔符停止。本例中,getline() 使用換行符(\n)作為分隔符,因為當從鍵盤或文件讀取用戶輸入時,數據行由換行符分隔。

結果證明這是一種更安全的方法讀取任意數據,一次一行。要使用 getline(),首先定義一個字符串指針并將其設置為 NULL ,表示還沒有預留內存,再定義一個 size_t 類型的“字符串大小” 的變量,并給它一個零值。當你調用 getline() 時,你需要傳入字符串和字符串大小變量的指針,以及從何處讀取數據。對于示例程序,我們可以從標準輸入中讀取:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char *string = NULL;
  size_t size = 0;
  ssize_t chars_read;
  // 使用 getline 讀取長字符串
  puts("Enter a really long string:");
  chars_read = getline(&string, &size, stdin);
  printf("getline returned %ld\n", chars_read);
  // 檢查錯誤
  if (chars_read < 0) {
    puts("couldn't read the input");
    free(string);
    return 1;
  }
  // 打印字符串
  printf("<%s> is length %ld\n", string, strlen(string));
  // 釋放字符串使用的內存
  free(string);
  return 0;
}

使用 getline() 讀取數據時,它將根據需要自動為字符串變量重新分配內存。當函數讀取一行的所有數據時,它通過指針更新字符串的大小,并返回讀取的字符數,包括分隔符。

Enter a really long string:
Supercalifragilisticexpialidocious
getline returned 35
<Supercalifragilisticexpialidocious
> is length 35

注意,字符串包含分隔符。對于 getline(),分隔符是換行符,這就是為什么輸出中有換行符的原因。 如果你不想在字符串值中使用分隔符,可以使用另一個函數將字符串中的分隔符更改為空字符。

通過 getline(),程序員可以安全地避免 C 編程的一個常見陷阱:你永遠無法知道用戶可能會輸入哪些數據。這就是為什么使用 gets() 不安全,而 fgets() 又太笨拙的原因。相反,getline() 提供了一種更靈活的方法,可以在不破壞系統的情況下將用戶數據讀入程序。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2019-04-11 08:00:00

Windows刪除文件

2022-12-25 10:09:44

2016-05-11 14:16:20

2018-03-21 07:08:40

2022-10-12 15:15:56

數字孿生物聯網

2014-06-06 14:33:29

BYOD移動安全

2022-07-04 10:11:33

云安全混合云云計算

2024-03-14 11:22:54

2010-03-11 19:16:32

Python語言

2024-01-10 17:27:00

Python開發

2021-09-14 09:00:00

私有云安全云架構

2019-06-17 08:00:55

multipassbash腳本

2019-03-21 10:15:57

Windows 10關閉計算機Windows

2022-05-18 07:09:35

C#語言架構

2023-10-11 17:38:43

Linux磁盤數據

2019-12-13 11:30:33

云計算IT安全

2013-12-30 10:43:15

云計算移動數據云安全

2024-10-10 15:08:40

2023-04-01 10:32:36

2024-01-22 16:38:00

AI人工智能GenAI
點贊
收藏

51CTO技術棧公眾號

在线视频婷婷| 亚洲人av在线影院| 欧美精品18videos性欧| www.99在线| 久久国产视频播放| 日韩在线精品强乱中文字幕| 天堂成人免费av电影一区| 日韩免费一区二区| 亚洲综合欧美日韩| 91在线视频免费播放| 成人福利一区二区| 久久欧美一区二区| 欧美在线激情网| 国产一级伦理片| 成人在线免费观看黄色| 国产一区二区电影| 日韩视频在线一区| 婷婷丁香激情网| av网站网址在线观看| 久久精品久久精品| 日韩综合中文字幕| 中国一级特黄录像播放| 高清不卡一区| 一区二区三区日本| av在线亚洲男人的天堂| 久久亚洲成人av| 91久久精品无嫩草影院| 国产精品午夜春色av| 国产精品国产亚洲伊人久久| 天天操天天干天天操天天干| 韩日精品一区| 国产精品久久久久久久裸模| 国产99久久精品一区二区永久免费 | 香港三日本三级少妇66| 欧美激情自拍| 精品精品欲导航| 男女视频网站在线观看| 欧美一区二区黄片| 亚洲在线免费| 中文字幕国产精品| 色婷婷综合在线观看| 毛片在线导航| 99久久久精品免费观看国产蜜| 国内揄拍国内精品| 国产精品扒开腿做爽爽| yw.尤物在线精品视频| 亚洲一区二区视频在线| 玛丽玛丽电影原版免费观看1977| 啦啦啦免费高清视频在线观看| 最近国产精品视频| 欧美日韩一级视频| 一二三在线视频| 婷婷伊人综合中文字幕| 日韩国产欧美三级| 美女av一区二区三区| 国产精品熟妇一区二区三区四区| 亚洲天堂手机| 中文字幕一区二区三区四区不卡| 秋霞毛片久久久久久久久| 国产美女免费看| 国产精品综合| 久久久国产一区| 人妻少妇精品视频一区二区三区| 国产精品伦一区二区| 一区二区三区中文在线观看| 国产成人免费高清视频| 在线观看中文字幕的网站| 一区二区国产盗摄色噜噜| 欧美日韩亚洲在线| 午夜精品久久久久久久第一页按摩 | 美女av一区二区三区| 全网免费在线播放视频入口| 成人另类视频| 亚洲激情小视频| 亚洲天堂av一区二区| 国产社区精品视频| 亚洲视频免费看| 欧美一级爽aaaaa大片| 国产黄色片在线播放| av在线不卡免费看| 久久久久久久久久久久久久一区 | 亚洲天堂色网站| 日韩av影视大全| 欧美电影网站| 亚洲动漫第一页| 女女同性女同一区二区三区按摩| 免费在线稳定资源站| 国产精品自拍一区| 国产精品视频免费在线| 看片网址国产福利av中文字幕| 国产精品美女| 国产日韩欧美91| 香蕉污视频在线观看| 久久99精品久久只有精品| 日本精品一区二区三区在线播放视频| 中文天堂在线播放| 久久亚洲欧美| 亚洲va电影大全| 中文字幕在线网站| 成人小视频免费在线观看| 91中文在线观看| 午夜av免费在线观看| 欧美国产激情二区三区| 免费特级黄色片| 日韩另类在线| 依依成人综合视频| 中文字幕乱码人妻综合二区三区| av资源在线播放| 亚洲线精品一区二区三区| 国产激情在线观看视频| 高清av不卡| 日韩人在线观看| 内射国产内射夫妻免费频道| av在线资源| 日本乱人伦aⅴ精品| 日本黄网站免费| 一区二区三区欧洲区| 在线观看国产欧美| 亚洲国产精品一区二区久久hs| 欧美大人香蕉在线| 久久精品人人爽| 一级做a爰片久久毛片| 久久久久久久高潮| 国产精品视频免费在线| 午夜视频免费在线| 一区二区三区丝袜| 玖玖爱视频在线| gogo大尺度成人免费视频| 欧美一区二区三区在| 苍井空张开腿实干12次| 国产+成+人+亚洲欧洲在线| 精品精品国产高清a毛片牛牛| 日韩av片在线| 久久黄色影院| 麻豆av一区| 成人在线黄色电影| 日韩欧美国产综合| 午夜国产福利一区二区| 久久99国产精品麻豆| 亚洲不卡中文字幕| 中文字幕有码在线视频| 欧美三级视频在线观看| 日本高清www| 色婷婷热久久| 欧美精品第一页在线播放| 国产欧美日韩综合精品一区二区三区| 日本一区二区动态图| 国产成人综合一区| 麻豆国产一区| 精品无人区乱码1区2区3区在线| 自拍偷拍亚洲天堂| 亚洲欧美日韩国产| 欧美精品成人一区二区在线观看| 热色播在线视频| 欧美日韩亚洲综合在线| 一色道久久88加勒比一| 自拍欧美日韩| 青青久久aⅴ北条麻妃| 深夜福利视频在线免费观看| 久久久亚洲午夜电影| 亚洲永久一区二区三区在线| 欧美激情福利| 久久中文精品视频| 国产精品久久久久久久久久精爆| 93久久精品日日躁夜夜躁欧美| 丝袜美腿玉足3d专区一区| 欧美aaaxxxx做受视频| 欧美tk丨vk视频| 日韩三级小视频| 国产又粗又猛又爽又黄91精品| 亚洲日本无吗高清不卡| 91精品亚洲一区在线观看| 欧美另类极品videosbest最新版本 | 婷婷av一区二区三区| 色综合久久综合中文综合网| 久久国产柳州莫菁门| 欧美日韩国内| 国产一区二区三区无遮挡| 日韩av中文| 日韩欧美福利视频| 真实乱偷全部视频| 日韩精品一卡| 91最新在线免费观看| 多野结衣av一区| 一区二区中文字幕| 国产富婆一级全黄大片| 亚洲国产精品黑人久久久| 日韩高清第一页| 在线看片日韩| av一区和二区| 怡红院成人在线| 亚洲免费影视第一页| 久久久久久天堂| 久久久影视传媒| 午夜啪啪小视频| 亚洲经典在线| 国产精品视频免费一区| 中文字幕中文字幕在线中高清免费版| 亚洲国产97在线精品一区| 精品国产乱码久久久久久鸭王1| 久草在线在线精品观看| 欧美一级爱爱视频| 日本一区二区三区播放| 欧美性视频精品| 少妇激情av一区二区| 欧美美女直播网站| 99热在线观看精品| 久久国产视频网| 国精产品一区一区三区视频| 久久人体视频| 久久亚洲一区二区| 亚洲综合网狠久久| 国产中文日韩欧美| 亚洲一区资源| 久久久在线视频| 国产精品实拍| 欧美一二三区在线观看| 天天操天天操天天操天天操天天操| 不卡电影一区二区三区| 国产 日韩 亚洲 欧美| 久久精品国产亚洲夜色av网站 | 西野翔中文久久精品字幕| 久久免费视频网| 欧美私人网站| 欧美一区2区视频在线观看| 欧美成人一区二区三区四区| 亚洲国产婷婷综合在线精品| 欧美一级特黄高清视频| 国产人伦精品一区二区| 欧美午夜aaaaaa免费视频| 国产亚洲一区| 成人黄色av免费在线观看| 羞羞网站在线看| 久久亚洲国产精品| a√在线中文网新版址在线| 亚洲人成电影网| 青青草视频在线免费观看| 亚洲黄色www网站| 色婷婷视频在线| 亚洲国产精品网站| 欧美一区二区黄片| 亚洲国产精品成人av| 人妻一区二区三区| 欧美xxxx老人做受| 丁香花免费高清完整在线播放| 婷婷中文字幕一区三区| 日本二区在线观看| 久久久精品天堂| 中文字幕狠狠干| 91丨porny丨户外露出| 黑森林精品导航| 日韩成人一区二区| 天堂av在线网站| 久草在线在线精品观看| 久久精品一卡二卡| 国产suv精品一区二区6| 青青青在线视频免费观看| 亚洲女人av| 噼里啪啦国语在线观看免费版高清版 | 色婷婷综合成人| 亚洲国产精品二区| 欧美自拍偷拍一区| 日本在线视频中文字幕| 一区二区中文字幕在线| 午夜在线观看一区| 中文字幕第一区综合| 日本视频在线免费| 99天天综合性| 亚洲av综合一区二区| 欧美精彩视频一区二区三区| 欧美一区二区三区观看| 一区二区三区蜜桃网| 西西44rtwww国产精品| 色狠狠综合天天综合综合| 国产亚洲久一区二区| 亚洲成人综合网站| 欧美日韩一级黄色片| 欧美三电影在线| 国产浮力第一页| 亚洲欧美国产精品va在线观看| 超碰97在线免费观看| 日韩精品福利网站| 亚洲av无码国产精品永久一区| 亚洲成人黄色网址| 成年网站在线| 九九热这里只有在线精品视| 韩国成人二区| 国产欧美日韩免费| 88xx成人免费观看视频库| 成人乱色短篇合集| 国内视频在线精品| 日本一区二区不卡高清更新| 99久久婷婷这里只有精品| 天堂资源在线亚洲资源| 中文在线播放一区二区| 无码人妻丰满熟妇区毛片18| 久久国产三级精品| 国产伦精品一区二区三区妓女 | 国产精品资源在线看| 成人免费看aa片| 亚洲精品视频在线观看网站| 熟女少妇a性色生活片毛片| 亚洲国产视频网站| 在线免费观看视频网站| 在线观看视频一区二区欧美日韩| 国产色综合视频| 亚洲丝袜av一区| japanese色国产在线看视频| 国产精品久久久久久网站| 成人h动漫免费观看网站| 亚洲一区美女| 视频一区欧美日韩| 欧美在线一级片| 亚洲美女区一区| 亚洲视频在线观看一区二区| 亚洲另类激情图| 波多野结衣在线播放| 91精品视频在线| 日韩精品一区二区三区中文在线 | 黄色av网站在线免费观看| 亚洲男子天堂网| 蜜桃传媒在线观看免费进入| 国产玖玖精品视频| 国产精品欧美三级在线观看| 国产av人人夜夜澡人人爽麻豆| 精品不卡视频| 亚洲自拍第三页| 国产精品国产三级国产| 黄色污污网站在线观看| 日韩激情片免费| 999av小视频在线| 91在线免费看片| 伊人久久大香线蕉无限次| 日韩动漫在线观看| 天天做天天爱综合| 亚洲激情在线观看视频| 久久久99免费| 亚洲精品国产无码| 精品亚洲夜色av98在线观看 | 激情亚洲一区二区三区四区| www.久久成人| 色综合久久悠悠| 激情av在线播放| 爱情岛论坛亚洲入口| 欧美日本一区二区高清播放视频| 日本网站在线看| 一区二区三区不卡在线观看 | 成人深夜视频在线观看| 欧美成人三级视频| 欧美成人伊人久久综合网| 一区二区三区伦理| 国产成人一区二区三区免费看| 亚洲三级精品| 黄色片一级视频| 国产欧美一区二区三区网站| 成人一级免费视频| 中文字幕亚洲综合久久筱田步美 | 国产精品三区在线| av成人毛片| 天天av天天操| 亚洲精品国产高清久久伦理二区| 精品国产无码一区二区| 欧美激情图片区| 欧美一级二级三级视频| 国产盗摄视频在线观看| 国产精品996| 国产精品av久久久久久无| 欧美日韩另类一区| 日本在线视频1区| 国产精品国产福利国产秒拍| 99久久精品费精品国产| 国产成人精品一区二区三区在线观看 | 欧洲精品国产| 精品在线视频一区| 国产一级淫片a| 亚洲人午夜精品| 91精品国产自产观看在线 | 91精品少妇一区二区三区蜜桃臀| 欧美一级二级三级蜜桃| 一区二区乱码| 亚洲在线视频一区二区| 成人黄色在线看| 欧美另类高清videos的特点| 欧美成人激情在线| 欧美调教网站| 手机免费av片| 福利微拍一区二区| 国 产 黄 色 大 片| 欧美又大又硬又粗bbbbb| 天天操综合网| 中文字幕一区二区三区乱码不卡| 亚洲精品免费播放| 欧美日韩视频精品二区| 91久久精品在线| 亚洲综合国产| 黄色一级片中国| 亚洲人成免费电影| 91成人精品在线| 色婷婷.com| 色狠狠综合天天综合综合|