[問題] gets和scanf問題

看板C_and_CPP (C/C++)作者 (平凡)時間10年前 (2015/08/09 11:38), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 程式1 #include <stdio.h> int main(int argc, char *argv[]) { char s1[4]="XYZ"; char s2[4]; gets(s2); printf ("s2=%s\n",s2); printf ("s1=%s\n",s1); return 0; } 程式2 #include <stdio.h> int main(int argc, char *argv[]) { char s1[4]="XYZ"; char s2[4]; scanf("%s",s2); printf ("s2=%s\n",s2); printf ("s1=%s\n",s1); return 0; } 補充說明(Supplement): 老師先教scanf,再教gets, 教到gets時, 編譯器上顯示gets不安全, 老師解釋: 因為gets會有容易發生內存溢位 我不懂的是 我try了上面兩個程式, 輸入ABCDEFG, 顯示s1=EFG非XYZ, 發生溢位 為什麼在gets就顯示不安全呢?scanf就沒有呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.184.137 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1439091514.A.6AA.html

08/09 12:05, , 1F
scanf 也是不安全,主要差別是 gets 無法限制寬度
08/09 12:05, 1F

08/09 13:08, , 2F
char c[6];scanf("%5s",c) 沒加長度限制一樣危險
08/09 13:08, 2F

08/10 15:28, , 3F
fgets
08/10 15:28, 3F
文章代碼(AID): #1LniiwQg (C_and_CPP)
文章代碼(AID): #1LniiwQg (C_and_CPP)