gets函式在使用上要注意什麼問題

2022-03-06 21:56:36 字數 2924 閱讀 4156

1樓:琉璃易碎

gets函式,可以無限讀取,不會判斷上限,以回車結束讀取,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。gets是從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字串。

gets函式可以無限讀取,不會判斷上限,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。如果溢位,多出來的字元將被寫入到堆疊中,這就覆蓋了堆疊原先的內容,破壞一個或多個不相關變數的值。這個事實導致gets函式只適用於玩具程式。

在v7的手冊(2023年)中說明:為了向後相容,gets刪除換行符,gets並不將換行符存入緩衝區。

讀入成功,返回與引數buffer相同的指標;讀入過程中遇到eof(end-of-file)或發生錯誤,返回null指標。所以在遇到返回值為null的情況,要用ferror或feof函式檢查是發生錯誤還是遇到eof。

2樓:風若遠去何人留

gets函式 讀取一行到引數指向的空間

常見的呼叫方式為

char buffer[100];

gets(buffer);

使用gets時 需要注意

gets在向buffer裡面寫資料的時候 並不知道buffer的大小 所以根據需求,buffer必須要提供足夠大的空間,否則會記憶體越界

gets只能獲取一行 即遇到輸入中有換行符就會返回gets中讀入換行符\n但是不會在字串中存在,即上面例子中,讀到的buffer裡面是沒有\n的

\n對應的會被換成字串結束符\0

舉例 還是上面的程式段

輸入123456\n5464\n

buffer中的資料為123456\0

關於c語言gets函式的一些問題 5

3樓:匿名使用者

bhu bu,不是空串。

gets不會讀取上面輸入的回車。

有**了建議還是自己動手操作一下比較好

為什麼在c語言中使用gets函式是危險的

在c語言中怎樣使用gets()函式?

4樓:whom莪

gets從標準輸入裝置讀字串函式。可以無限讀取,不會判斷上限,以回車結束讀取,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。

從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為『\0』空字元,並由此來結束字串。

讀入成功,返回與引數buffer相同的指標;讀入過程中遇到eof(end-of-file)或發生錯誤,返回null指標。所以在遇到返回值為null的情況,要用ferror或feof函式檢查是發生錯誤還是遇到eof。

本函式可以無限讀取,不會判斷上限,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。如果溢位,多出來的字元將被寫入到堆疊中,這就覆蓋了堆疊原先的內容,破壞一個或多個不相關變數的值。

這個事實導致gets函式只適用於玩具程式,為了避免這種情況,我們可以用fgets(stdin) (fgets實際上可以讀取標準輸入(即大多數情況下的鍵盤輸入),具體參閱fgets詞條)來替換gets()。為了向後相容,gets刪除換行符,gets並不將換行符存入緩衝區。

關於c語言中gets()函式的問題

5樓:匿名使用者

gets()將額外的字元放到str中, 來處理多餘的字元輸入。

6樓:滕邦宇文思凡

你的 gsts(a); 寫錯了,應該是gets(a)

gets的確有安全隱患,但c中用它還是很多的(只要你定義足夠的空間就可以了)

7樓:

scanf和gets的區別是很大的:scanf功能非常強大,在不同的控制符下能接收花樣很多的資料;後者只能接收字串。在這個自定義函式中,scanf必須接收一個數字,否則只要不是'\n'就要重新輸入,只要輸入數字(在int範圍內無論多大)都會返回1,進而使while進入體迴圈,由gets(str)接收一個字串(字母、符號、數字都可以)。

然後,輸出"請輸入1~5之間的數字:"的提示進行下一輪迴圈,直到輸入一個'\n'為止。最後返回最後一次輸入的數字。

這個函式,從函式名看,似乎是要從鍵盤接收一個字串,但實現寫得只能說沒有語法錯誤,看不出要達到什麼目的,所以無法分析它的對錯……

c語言中的gets函式問題!

8樓:匿名使用者

首先這裡如果行數超過max,輸入字元超過len就會錯。其次應該沒問題。

你可以自己執行一下試試看。

gets(text[t])是把輸入的字串讀入text[t]text是個二維陣列,比如第一行是abc,那麼text[0][0]='a'

text[0][1]='b'....

text[0] = 'abc\0'吧……

9樓:匿名使用者

gets(str)有邊界溢位的可能。

比如你的str定義只有80個char單元,但輸入的時候卻輸入了80個以上的字元,那麼就發生了溢位。c語言是不檢查邊界溢位的,編譯不報錯。但溢位會破壞記憶體中的資料,產生不可預料的後果。

所以要儘量避免。

但平常練習的時候gets()函式是經常用到的,因為它用起來很方便。

我們現在所編寫的程式主要是為了學習演算法,並不是像專業程式設計師那樣要求嚴密性,減少bug。所以你在給字串定義了一個足夠大的長度時用gets()沒關係。

話有說回來,保持一個嚴謹的程式設計風格也是很有必要的。你自己抉擇吧。

text是一個二維陣列,gets(text[t])是給text[t]賦值。

使用澳能需要注意什么,使用澳能需要注意什麼?

患者使用澳能 滷米鬆乳膏 的禁忌有 細菌和病毒性 病 如水痘 膿皮病 接種疫苗後 單純皰疹 帶狀皰疹 真菌性 病 梅毒性 病變 結核病 玫瑰痤瘡 口周皮炎 尋常痤瘡患者。已知對滷米鬆及本品其它成份過敏者。本品活性物質及 或其代謝產物是否泌入乳汁尚不清楚,哺乳期婦女應慎用。兒童用藥 連續性 不應超過兩...

使用智慧馬桶需要注意什麼,智慧馬桶使用注意事項有哪些

在使用智慧馬桶時有哪些要注意的地方 1 清洗座便蓋和座圈 不要用水直接沖洗 智慧馬桶是用電的產品,在清洗時切忌直接用水沖洗。如果要使用清洗液,要先在不顯眼的地方測試,確定不會對外表造成損壞再應用於表面。清潔時不要讓清潔劑浸泡產品,加上清潔劑後要立即擦洗乾淨。不要用刷子 沖刷墊這種表面粗糙的材料來擦洗...

使用呼吸系統藥要注意什麼

使用呼吸系統藥要注意抗生素要堅持應用3 5天,呼吸系統疾病多以感染為主,往往需要應用抗生素。引起呼吸系統疾病的病原微生物很多,針對不同的病原微生物,抗生素的選擇是不同的。另外,在抗生素的應用中還應注意其用法 用量 療程和 因此抗生素必須在醫生指導下應用。特別提醒的是,不要勤換抗生素,一種抗生素發揮作...