该程序应该打开一个文本文件,其路径是用户输入的。接下来,它计算文件中包含的行并输出它们。这就是我的尝试:
#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。所以我很感激只有这些的解决方案,因为我相信你知道很多方法。
答案 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;