我尝试使用open()在与源文件相同的目录中打开html文件。但是我不知道为什么is_open()总是在我的程序中返回false .... 这是我的源代码的一部分
在readHTML.cpp中打开html文件的其中一个函数
#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()总是返回false,因为它在我的eclipse控制台中输出0 ... 我不知道为什么即使我尝试将我的参数目录重置为我的工作区 或者我将我的html文件放在调试文件夹中..它仍然返回false。
答案 0 :(得分:0)
班级ifstream
无法打开网站。它只打开文件。您需要使用CURL等库。
答案 1 :(得分: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
以不使用指针。