[問題] scanf()問題

看板C_and_CPP作者 (沒有暱稱)時間9年前 (2014/11/19 01:04), 9年前編輯推噓0(009)
留言9則, 4人參與, 最新討論串1/2 (看更多)
char str[10]=""; scanf("%s",str); 為什麼我輸入超過10個數字 printf("%s",str); 可以顯示超過十個數字? 但是如果輸入太多就不行(停止回應) sizeof(str);會是10 輸入超過10個字還是10 strlen(str);會是0 為什麼? 如果有預設值 那電腦會自動加'\0' 便會是對的 然後我在下面加for迴圈跑比如說16次因為我輸入16個字 也是照樣printf出16個字。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.173.72 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416330264.A.A03.html ※ 編輯: anoymouse (118.169.173.72), 11/19/2014 01:07:16

11/19 01:13, , 1F
overflow 啊, 蓋掉某些東西還可以跑但會不正常
11/19 01:13, 1F

11/19 01:14, , 2F
sizeof 回傳陣列大小 strlen 從基底讀到第一個 \0
11/19 01:14, 2F

11/19 01:20, , 3F
我看網路上說 scanf輸入完會自動加'\0'
11/19 01:20, 3F

11/19 01:41, , 4F
限制字數, 例如限制 5 byte 要用 %5s, 不然會繼續寫入
11/19 01:41, 4F

11/19 01:41, , 5F
然後後面的程式碼就被覆蓋惹 QQ
11/19 01:41, 5F

11/19 02:00, , 6F
不管我輸入幾個字 strlen都還是0耶 除非事先宣告
11/19 02:00, 6F

11/19 09:55, , 7F
可以把code貼上來,多半是使用的問題,strlen的實作很單純
11/19 09:55, 7F

11/19 14:14, , 8F
會自動容錯一點點,scanf會幫你加上\0
11/19 14:14, 8F

11/19 14:14, , 9F
不過還是計算好字串長度比較保險
11/19 14:14, 9F
文章代碼(AID): #1KQtmOe3 (C_and_CPP)
文章代碼(AID): #1KQtmOe3 (C_and_CPP)