C ++ fstream is_open()函数总是返回false

时间:2014-11-22 09:33:34

标签: c++ fstream

我尝试使用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。

2 个答案:

答案 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以不使用指针。