[問題] scanf()問題

作者: anoymouse (沒有暱稱)   2014-11-19 01:04:21
char str[10]="";
scanf("%s",str); 為什麼我輸入超過10個數字
printf("%s",str); 可以顯示超過十個數字? 但是如果輸入太多就不行(停止回應)
sizeof(str);會是10 輸入超過10個字還是10
strlen(str);會是0 為什麼? 如果有預設值 那電腦會自動加'\0' 便會是對的
然後我在下面加for迴圈跑比如說16次因為我輸入16個字
也是照樣printf出16個字。
作者: PoorLoser (廢文製造機)   2014-11-19 01:13:00
overflow 啊, 蓋掉某些東西還可以跑但會不正常sizeof 回傳陣列大小 strlen 從基底讀到第一個 \0
作者: anoymouse (沒有暱稱)   2014-11-19 01:20:00
我看網路上說 scanf輸入完會自動加'\0'
作者: PoorLoser (廢文製造機)   2014-11-19 01:41:00
限制字數, 例如限制 5 byte 要用 %5s, 不然會繼續寫入然後後面的程式碼就被覆蓋惹 QQ
作者: anoymouse (沒有暱稱)   2014-11-19 02:00:00
不管我輸入幾個字 strlen都還是0耶 除非事先宣告
作者: dirkc (3781615)   2014-11-19 09:55:00
可以把code貼上來,多半是使用的問題,strlen的實作很單純
作者: jacky1989   2014-11-19 14:14:00
會自動容錯一點點,scanf會幫你加上\0不過還是計算好字串長度比較保險

Links booklink

Contact Us: admin [ a t ] ucptt.com