2015-12-21 124 views
-3

我在這裏構建webcrawler。我開始調試時發生此錯誤,並將我發送到memcpy.asmxstringdbgdel.cpp文件,每次顯示這些文件的不同行。C++訪問衝突寫入位置0x000A000B

我想知道代碼是否錯了。我開始想我正在訪問我不應該使用的內存塊。這是一些代碼。我希望你能幫忙。

這個想法是遍歷httpContent並從<a>標籤獲得所有的URL。我在開始尋找href=",然後尋找下一個"。我在嘗試輸入temp之間的內容,然後將temp的內容傳遞給一個字符串數組。

struct Url 
{ 
    string host; 
    string path; 
}; 
int main(){ 
    struct Url website; 
    string href[100]; 
    website.host = "crawlertest.cs.tu-varna.bg"; 
    website.path = ""; 
    string httpContent = downloadHTTP(website); 


for(unsigned int i = 0; i <= httpContent.length()-7; i++){ 
     char c = httpContent[i]; 
       if(c == 'h'){ 
        c = httpContent[i+1]; 
        if(c == 'r'){ 
         c = httpContent[i+2]; 
         if(c == 'e'){ 
          c = httpContent[i+3]; 
          if(c == 'f'){ 
           c = httpContent[i+4]; 
           if(c == '='){ 
            c = httpContent[i+5]; 
            if(c == '\"'){ 
        i+=6; 
        c = httpContent[i]; 
        string temp = ""; 
        while(c!='\"'){ 
        i++; 
        c = httpContent[i]; 
        temp+= c; 
       } 
       href[i] = temp; 
       temp = ""; 
       cout<<href[i]<<endl; 
            }}}}}} 
    } 
    system("pause"); 
    return 0; 
} 

UPDATE

我編輯了=,現在==

我也停止迭代7位早先所以「如果公司不應該是問題。

雖然我收到相同的錯誤。

+5

你即使那些嚴重'如果公司使用'='的'而不是'== –

+1

您的所有'INT I = 0;我<= httpContent.length()'好吧,這可能不是很好,因爲'httpContent [i]'將在最後一次迭代中超出範圍....'c = httpContent [i + 5];',嗯 – NathanOliver

+2

if's – AndyG

回答

1

使用std::vector<std::string> href;來存儲您的結果。 使用string::find可以在字符串中找到順序並使用string::substr可以從字符串中提取它們。

#include <vetor> 
#include <string> 

struct Url 
{ 
    string host; 
    string path; 
}; 
int main(){ 
    struct Url website; 
    website.host = "crawlertest.cs.tu-varna.bg"; 
    website.path = ""; 
    std::string httpContent = downloadHTTP(website); 

    std::vector<std::string> href; 
    std::size_t pos = httpContent.find("href="); // serach for first "href=" 
    while (pos != string::npos) 
    { 
     pos = httpContent.find('"', pos+5); // serch for '"' at start 
     if (pos != string::npos) 
     { 
      std::size_t posSt = pos + 1; 
      pos = httpContent.find('"', posSt); // search for '"' at end 
      if (pos != string::npos) 
      { 
       href.push_back(httpContent.substr(posSt, pos - posSt)); // extract ref and append to result 
       pos = httpContent.find("href=", pos+1); // search for next "href=" 
      } 
     } 
    } 

    system("pause"); 
    return 0; 
}