用户输入文件路径

时间:2015-02-19 13:39:31

标签: c++ string file-io

该程序应该打开一个文本文件,其路径是用户输入的。接下来,它计算文件中包含的行并输出它们。这就是我的尝试:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
string path = NULL;
string garbage = NULL;
int cnt = 0;
cout << "Enter file path: ";
cin >> path;

ifstream inFile(path.c_str());
if (inFile)
{
    while (!inFile.eof())
    {
        getline(inFile, garbage);
        ++cnt;
    }
}
inFile.close();

cout << endl;

cout << path << " has " << cnt << " lines";


cin.ignore();
cin.get();
return 0;
}

这就是我得到的:

程序:C:\ Windows \ SYSTEM32 \ MSVCP120D.dll 文件:c:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xstring 行:1168 表达式:无效的空指针

注意:我跟随的课程只向我展示了ifstream和ofstream使用的方法的基础知识,比如open,close和eof。所以我很感激只有这些的解决方案,因为我相信你知道很多方法。

2 个答案:

答案 0 :(得分:1)

std::string是一个合理的容器类,如std::vector,但API具有许多额外的面向字符串的函数。

在一个特定的情况下,它的使用 not 类似于char*方面的老式C风格字符串处理,我认为你可以尝试使用{ {1}}作为初始化程序。 (在现代C ++中,您应该使用C ++关键字NULL来创建空指针,而不是旧的C样式宏nullptr

NULL 实际所做的是将string path = NULL;解释为NULL,然后尝试在{{1}位置读取C风格的字符串}指向以便将其复制到const char*。由于NULL为null而不是实际指向字符串,因此您会收到引用的错误消息。

您真正想要做的只是通过path使用默认构造函数,将NULL初始化为空字符串。

答案 1 :(得分:0)

不要使用无意义的NULL他们不是指针:

string path;
string garbage;