⑴ c語言編程中字元串復制函數編程程序出現錯誤,這是怎麼回事
這是CPP工程,頭文件你得改成
#include"stdio.h"
#include"string.h"
如果是#include<string>就是調用C++的庫
⑵ 在C語言中為什麼gets函數有的時候不推薦用 編譯的時候編譯器都會提示warning
這是關繫到信息安全領域的一些知識。
會有這樣的一個情況:
char a[12];
gets(a);
當你輸入的東西遠比12要長時,他還是會接收並寫入空間。這樣就溢出了,覆蓋掉後面的相應空間。也就是說他寫入了不該他來寫的東西。如果寫得設計好點,完全可以通過這個去完成一些不好的事情。編譯器一般會提示你去換個安全的函數,來避免這個情況。
⑶ c語言的gets函數編譯不成功阿,很短的程序
你是用什麼c的編程軟體的,我用vc6調試運行這段程序是完全編譯通過的,而且運行結果也正確,所以不是程序本身的問題,而是你調試運行時候有錯誤或者你用的編譯器本身就有問題。
糾正一點,編譯出錯的提示裡面,你最主要看的是error後面跟著的內容,warning後面跟著的內容只是警告,譬如一些數據類型的自動轉換,編譯的時候都會出現warning,直接忽略就好了。
⑷ 在c語言中怎樣使用gets()函數
gets從標准輸入設備讀字元串函數,可以無限讀取,不會判斷上限,以回車結束讀取,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。
1、從stdin流中讀取字元串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字元數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為『 』空字元,並由此來結束字元串。
2、讀入成功,返回與參數buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數檢查是發生錯誤還是遇到EOF。
3、本函數可以無限讀取,不會判斷上限,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字元將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變數的值。這個事實導致gets函數只適用於玩具程序,為了避免這種情況,我們可以用fgets(stdin) (fgets實際上可以讀取標准輸入(即大多數情況下的鍵盤輸入),具體參閱fgets詞條)來替換gets()。在V7的手冊(1979年)中說明:為了向後兼容,gets刪除換行符,gets並不將換行符存入緩沖區。
4、gets()函數用來從標准輸入設備(鍵盤)讀取字元串直到換行符結束,但換行符會被丟棄,然後在末尾添加'