C中碰到的問題(gets和strcpy)

2021-06-08 11:54:11 字數 821 閱讀 1955

最近碰到了一些問題。

第乙個是gets函式

#include int main()

$./a.out

adadadadadadadad

adadadadadadadad

$定了buffer的大小為5,但是輸入這麼多還是可以正常輸入輸出。

其實編譯的時候系統已經提示了「gets」function is dangerous and should not be used。

通過這個例子現在知道為什麼是dangerous的了,因為輸入多了,gets還是會讀進去,放在buffer裝滿後相鄰的記憶體中,如果buffer相鄰的記憶體沒有要用的資料還好,要是存著要用的資料於是就悲劇了,資料就被沖洗掉了,所以gets這個函式很危險。

還有乙個就是strcpy函式

#include #include int main()

~

$../a.out

hnaa

原本的以為會列印出hina來,一直想不明白,明明是把後四個拷貝給buffer,為什麼會變成hnaa呢?

還是記憶體問題,buffer和buffer+1是同一塊記憶體上的,這樣就會出現誰複製誰的乙個問題了,buffer被拷貝後會被替換,但是替換完了這些內容又會被拿去拷貝,很難用語言去表達,大家可以自己理解下,同一塊記憶體的東西拷貝給同一塊記憶體,想想肯定是會出問題的。

C 編譯中碰到的問題

vs2010編譯 編譯器可以連線多種庫,如c執行庫,標準c 庫,和舊iostream 庫 c 包含標頭檔案帶 h,如 include則visual c 在編譯時,自動連線到舊的iostream庫中。如果不帶.h,並使用了命名空間std,如 include using namespace std 則編...

C 中,cin和gets 的區別

下面通過兩個例子說明一下此cin和gets 區別 include using namespace std int main char str 20 cin str cout輸入 abc 空格 abc 輸出 abc include using namespace std int main char s...

harbor中碰到的問題

harbor部署整體比較簡單,但是就是這麼簡單的東西稍微改變點配置檔案就會有不小的問題 1.問題1 部署harbor1.6發現web介面刪除的映象在push一遍上去後,映象大小為0 且無法刪除,這個問題一直沒有解決,當然好像大家都沒有碰到類似的問題,換了一下版本用了1.2 和1.7測試都沒有問題,具...