作者hsiaotzu0911 ()
看板C_and_CPP
標題[問題] VC++ 執行到一半就出現存取違規被強制中斷
時間Tue May 5 11:53:02 2009
於 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
1F:→ jaw109:題外話, 雖然縮排是好習慣, 但縮得太深也不是件好事... 05/05 12:33
2F:→ jaw109:GB << strtok(strstr(record2,string1)+50,"\""); 這行.. 05/05 12:37
3F:→ jaw109:發生錯誤之前的那瞬間record2和string1裡面是什麼東西? 05/05 12:38
4F:→ hsiaotzu0911:喔 歹事 我沒有全部複製出來 record2是個char型態 05/05 12:39
5F:→ hsiaotzu0911:string1也是char型態 已經儲存好我要比對的字串 05/05 12:40
6F:→ jaw109:要不要透露一下當時這兩個變數的內容? 不然這樣很難猜是哪 05/05 12:44
7F:→ hsiaotzu0911:好 那我把所有的程式碼貼出來? 05/05 12:45
※ 編輯: hsiaotzu0911 來自: 140.119.164.243 (05/05 12:49)
8F:→ jaw109:裡出錯... 你可以在程式碼裡面加一些類似assert或trycatch 05/05 12:46
9F:→ jaw109:的東西幫忙debug 05/05 12:46
10F:推 ledia:有 "<script>" 就一定會有 "msg_img" 嗎? 一定隔 50 bytes ? 05/05 13:58
11F:→ hsiaotzu0911:對 當判斷到msg_img之後數50個開始讀我要的東西 然後 05/05 14:14
12F:→ hsiaotzu0911:一定會有"可以停止 然後在所有的msg_img都讀完之後 05/05 14:14
13F:→ hsiaotzu0911:就會接著有<script>的tag 可以break掉 讓原始碼提早 05/05 14:15
14F:→ hsiaotzu0911:結束 不用讀到檔案的底端 05/05 14:15