我正在尝试打开.dat文件以用作我的程序的输入。赋值说我需要将我为文件名输入的名称转换为c-string数据类型,以便可以通过.open(“”)命令读取它。我的程序编译但我确定当我尝试转换文件名时我做错了什么。我一直在寻找有类似问题的人,但我没有运气,所以你能给我的任何建议都会非常感激!
这是我尝试打开文件的函数,以及我尝试转换文件名的另一个函数。
int main()
{
ifstream fp;
string name[SIZE], filename;
int counter, idx = 0;
float rate[SIZE], sum[SIZE], gross[SIZE], with[SIZE], pay[SIZE], net[SIZE], hours[SIZE];
getfile(fp, filename);
readFile(fp, name, rate, hours);
pay[SIZE] = calcPay(rate, sum);
gross[SIZE] = calcGross(pay);
with[SIZE] = calcAmount(gross);
net[SIZE] = calcNet(gross, with);
output(name, rate, sum, with, gross, net, pay, SIZE);
return 0;
}
//Convert filename into C-string
string convert(ifstream &fp, string filename)
{
fp.open(filename.c_str());
return filename;
}
//Get file name from user.
void getfile(ifstream &fp, string filename)
{
cout <<" Enter the name of the file: ";
cin>>filename;
convert(fp, filename);
fp.open("filename");
if (!fp)
{
cout<<"Error opening file\n";
exit (1);
}
}
答案 0 :(得分:1)
cout <<" Enter the name of the file: ";
cin>>filename;
convert(fp, filename);
fp.open("filename");
可能意味着(在目前C ++ 11支持的情况下):
cout << " Enter the name of the file: ";
cin >> filename;
fp.open(filename);
或(在C ++ 03中):
cout << " Enter the name of the file: ";
cin >> filename;
fp.open(filename.c_str());
旁注:数组中的元素从0
索引到SIZE - 1
,因此当您声明:
float pay[SIZE];
然后当你这样做:
pay[SIZE] = calcPay(rate, sum);
您正在访问内存“传递”最后一个元素,这会导致未定义的行为。