创建一个接收文件名但却无法正常工作的函数,因为它收到" Doctor.txtG"但是我正在给#34; Doctor.txt"我该如何解决?我的代码如下......
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
int number_of_lines = 0;
int numberoflines(string A);
int main()
{
cout<<numberoflines("Doctor.txt");
getch();
return 0;
}
int numberoflines(string A)
{
int Len;
char Chr[Len];
Len=A.length();
A.copy(Chr, Len);
//cout<<Len;
cout<<Chr;
string line;
ifstream myfile(Chr);
if(myfile.is_open())
{
while(!myfile.eof())
{
getline(myfile,line);
number_of_lines++;
}
myfile.close();
}
return number_of_lines;
}
答案 0 :(得分:1)
需要将以空字符结尾的字节复制到Chr中 使用
strcpy(Chr, A.c_str());
而不是A.copy(Chr, Len);
你应该正确地初始化Chr
char Chr[1024]
或
char* Chr = new char[Len + 1].
答案 1 :(得分:1)
您的问题正在发生,因为您正在尝试创建一个大小为Len的char数组。但是在使用之前你没有初始化Len。这就是导致未定义行为并产生此问题的原因。在声明变量时总是尝试初始化变量。否则,这个问题会经常发生。
但是,您不需要创建另一个char数组。只需在参数中使用std::string::c_str();
作为ifstream的构造函数。我在下面给出一个示例代码。这应该可以解决你的问题。
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
int number_of_lines = 0;
int numberoflines(string A);
int main()
{
cout<<numberoflines("Doctor.txt");
getch();
return 0;
}
int numberoflines(string A)
{
string line;
ifstream myfile(A.c_str());
if(myfile.is_open())
{
while(!myfile.eof())
{
getline(myfile,line);
number_of_lines++;
}
myfile.close();
}
return number_of_lines;
}