2014-11-22 3 views
0

Я попытался использовать open(), чтобы открыть html-файл в том же каталоге, что и исходный файл. Однако я не знаю, почему is_open() всегда возвращает ложь в моей программе .... Вот часть моего исходного кодаC++ fstream is_open() функция всегда возвращает false

одна из функций, чтобы открыть HTML-файл в readHTML.cpp

#include "web.h" 
     ... 
void extractAllAnchorTags(const char* webAddress, char**& anchorTags, int& numOfAnchorTags) 
    { 
     ifstream myfile; 
     char line[256]; 
     char content[2048] = ""; 

     numOfAnchorTags = 0; 
     myfile.open(webAddress); 
     cout<< myfile.is_open()<<endl; 
     if (myfile.is_open()) 
     {......} 
    } 

заголовок файл, web.h

#include <iostream> 
#include <fstream> 
#include <cstring> 

using namespace std; 

struct WebNode 
{ 
    char* webAddress; 
    char* anchorText; 
    WebNode** hyperlink; 
    int numOfHyperlinks; 
}; 

void extractAllAnchorTags(const char* webAddress, char**& anchorTags, int& numOfAnchorTags); 

другой CPP файл, callF.cpp

#include "web.h" 
........ 
WebNode* createWeb(const char* webAddress, const char* anchorText, int height) 
{ 
    if(height != 0){ 
     WebNode* webNode = new WebNode; 
     char** anchorTags; 
     int numOfAnchorTags; 
     strcpy(webNode->webAddress,webAddress); 
     strcpy(webNode->anchorText,anchorText); 
     extractAllAnchorTags(webAddress,anchorTags,numOfAnchorTags); 
     \*.........................*\ 
} 
....... 

main.cpp

#include "web.h" 

    int main(){ 
     ............. 
     cin >> filename; // index.html would be input during running. 
     Page = createWeb(filename, anchorText, max_height); 
     ............. 
     } 

мой main.cpp просто позвоните createWeb раз Однако то, что я получаю, что myfile.is_open() всегда возвращает ложь, поскольку она выводит 0 в моей консоли затмения ... у меня нет идея, почему я даже пытаюсь свернуть свой каталог аргументов в мою рабочую область , или я помещаю свой html-файл в папку отладки .. он все равно возвращает false.

+0

Какая операционная система? –

+0

Я использую Windows 7 64 бит – SerMintt

ответ

0

Вы пишите неинициализированными указатели:

struct WebNode 
{ 
    char* webAddress; 
    char* anchorText; 
    WebNode** hyperlink; 
    int numOfHyperlinks; 
}; 

// ... 

WebNode* webNode = new WebNode; 
strcpy(webNode->webAddress,webAddress); 

Указатель webNode->webAddress на данный момент не указывать в любом месте. Чтобы исправить это, измените его тип с char * на std::string и используйте назначение строки для копирования содержимого строки.

Ваше копирование на неинициализированный указатель вызывает неопределенное поведение, которое может привести к повреждению памяти и т. Д., Поэтому остальная часть вашей программы, похоже, терпит неудачу.

Также вы должны реконструировать extractAllAnchorTags, чтобы не использовать указатели.

+0

Спасибо, что вдохновили меня. Я пытаюсь поменять порядок моего кода, чтобы избежать такого повреждения памяти. Спасибо. Вы много времени сохраняете – SerMintt

0

Категория ifstream не может открывать веб-сайты. Он открывает только файлы. Вам нужно использовать библиотеку, такую ​​как CURL.

+0

Что делать, если я хочу прочитать исходный код html-файла, так как мне нужно прочитать содержимое внутри источника html? и я пытаюсь создать еще одну программу, которая просто открывает html-файл и возвращает true для меня ... Я понятия не имею, почему это произойдет .. – SerMintt

+0

Я предполагаю, что переменная 'webAddress' является URL-адресом. Я прав? –

+0

webAddress - это имя html, например index.html – SerMintt

Смежные вопросы