[問題] VC++ 執行到一半就出現存取違規被強制中斷

看板C_and_CPP (C/C++)作者時間16年前 (2009/05/05 11:53), 編輯推噓1(1013)
留言14則, 3人參與, 最新討論串1/1
於 0x1026642c (msvcr90d.dll) 的 guestbook.exe 中 發生未處理的例外狀況: 0xC0000005: 讀取位置 0x00000032 時發生存取違規 以下是程式碼 char fname[1024] ; sprintf(fname,"%s_GB.txt", userID.c_str()); ifstream file2("test.txt");//我已經先抓好的網頁原始碼 ofstream GB(fname); char record2[1024]; char string1[] = "\"msg_img\""; //ID前的辨識字串 while(!file.eof()){ file.getline(record2,sizeof(record2)); if(strstr(record2,string1)){ while(!strstr(record2,"<script>")){ GB << strtok(strstr(record2,string1)+50,"\""); file.getline(record2,sizeof(record2)); if(strstr(record2,"<script>")) break; else GB<<endl; } break; } } file.close(); GB.close(); 大約是想把我在html裡面的原始碼擷取我要的字串存在txt檔裡面 我用cout去測試的結果是 第二個while迴圈會正常跑一次 然後跑第二次的時候就停在GB << strtok.......那邊發生問題 就強迫中斷 想請問是什麼問題? 因為之前也有寫個類似的程式碼 但是沒有問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.164.243

05/05 12:33, , 1F
題外話, 雖然縮排是好習慣, 但縮得太深也不是件好事...
05/05 12:33, 1F

05/05 12:37, , 2F
GB << strtok(strstr(record2,string1)+50,"\""); 這行..
05/05 12:37, 2F

05/05 12:38, , 3F
發生錯誤之前的那瞬間record2和string1裡面是什麼東西?
05/05 12:38, 3F

05/05 12:39, , 4F
喔 歹事 我沒有全部複製出來 record2是個char型態
05/05 12:39, 4F

05/05 12:40, , 5F
string1也是char型態 已經儲存好我要比對的字串
05/05 12:40, 5F

05/05 12:44, , 6F
要不要透露一下當時這兩個變數的內容? 不然這樣很難猜是哪
05/05 12:44, 6F

05/05 12:45, , 7F
好 那我把所有的程式碼貼出來?
05/05 12:45, 7F
※ 編輯: hsiaotzu0911 來自: 140.119.164.243 (05/05 12:49)

05/05 12:46, , 8F
裡出錯... 你可以在程式碼裡面加一些類似assert或trycatch
05/05 12:46, 8F

05/05 12:46, , 9F
的東西幫忙debug
05/05 12:46, 9F

05/05 13:58, , 10F
有 "<script>" 就一定會有 "msg_img" 嗎? 一定隔 50 bytes ?
05/05 13:58, 10F

05/05 14:14, , 11F
對 當判斷到msg_img之後數50個開始讀我要的東西 然後
05/05 14:14, 11F

05/05 14:14, , 12F
一定會有"可以停止 然後在所有的msg_img都讀完之後
05/05 14:14, 12F

05/05 14:15, , 13F
就會接著有<script>的tag 可以break掉 讓原始碼提早
05/05 14:15, 13F

05/05 14:15, , 14F
結束 不用讀到檔案的底端
05/05 14:15, 14F
文章代碼(AID): #19_xWVhY (C_and_CPP)
文章代碼(AID): #19_xWVhY (C_and_CPP)