[問題] run-time check failure #2

看板C_and_CPP作者 (誠實面對自己吧!)時間11年前 (2013/03/31 19:53), 編輯推噓4(4013)
留言17則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2008 問題(Question): 使用者若故意亂輸入時程式出錯 餵入的資料(Input): 第一關時 我先輸入3個正確的字元 然後再多輸入一大串無關的字元 (比如說 ABCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) 進入下一關時 隨便輸入一個字元 預期的正確結果(Expected Output): 比對答案不符合 跳出程式 錯誤結果(Wrong Output): run-time check failure #2 - stack around the variable 'Ans' was corrupted. 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/4R13le (已修改為修改後的程式碼) 補充說明(Supplement): 麻煩各位幫忙解惑 有GOOGLE過 好像是寫入的位址有問題 但我還是不大懂他的意思 @@ -- -- ˙ ˙ ◥ ▲ 上吧,藍胖!! \' (OwQ ) ) ) ﹀ \ \ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.242.30.151

03/31 20:14, , 1F
char Ans[13]={}; 只能吃13個字元阿 你打一串超過了
03/31 20:14, 1F

03/31 20:15, , 2F
stack overflow 寫超過了
03/31 20:15, 2F

03/31 20:24, , 3F
可是如果我第一關 一樣輸入超過那麼多 第2關也輸入超過
03/31 20:24, 3F

03/31 20:24, , 4F
這樣卻不會有問題 @@?
03/31 20:24, 4F

03/31 20:26, , 5F
只要我輸入的是正確答案就都OK 輸入錯的才會出問題
03/31 20:26, 5F

03/31 20:46, , 6F
memset(Ans, 0,sizeof(Ans))
03/31 20:46, 6F

03/31 20:53, , 7F
buffer overflow
03/31 20:53, 7F

03/31 21:21, , 8F
請問 Terry ,memset()要擺在哪 @@ 我宣告ANS時 用memset把
03/31 21:21, 8F

03/31 21:22, , 9F
內容都改為0 可是還是一樣的情形
03/31 21:22, 9F

03/31 21:25, , 10F
輸入正確或錯誤進入第二關之前先清掉吧
03/31 21:25, 10F

03/31 21:54, , 11F
我在第23 跟 第26行 有做清除的動作 是這邊用錯嗎?
03/31 21:54, 11F

03/31 22:18, , 12F
感謝hpps幫我解決了!
03/31 22:18, 12F

03/31 22:19, , 13F
用while( ( ch = getchar() ) != EOF && ch != '\n' ) ;來
03/31 22:19, 13F

03/31 22:19, , 14F
清除過多的輸入
03/31 22:19, 14F

03/31 22:24, , 15F
抱歉貼錯 @@" 我是用fgets(temp, 13, stdin);來解決
03/31 22:24, 15F

03/31 22:24, , 16F
然後再用rewind(stdin);清掉多餘的部分
03/31 22:24, 16F

03/31 22:27, , 17F
感謝robinliao的幫忙
03/31 22:27, 17F
※ 編輯: kattte 來自: 111.242.30.151 (03/31 22:29) ※ 編輯: kattte 來自: 111.242.30.151 (03/31 22:36)
文章代碼(AID): #1HM2FFmK (C_and_CPP)