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