无法打开文件?

时间:2013-04-03 02:24:02

标签: c++

我不知道究竟是什么问题。我得到一个错误,说我需要初始化我的char *文件名但是如果我将它初始化为NULL我也会得到另一个错误?

我的主要功能是:

char * filename;
cout << "Enter the name of the graph file: ";
cin >> filename;
readgraph(filename, 1);

这是读取函数:

1 个答案:

答案 0 :(得分:4)

问题是指针只是指向到包含内存的空间。在你的代码中, filename 是(在这里手写)指向一个字符数组的指针,但你实际上从来没有给它任何指向。

您可以使用特定尺寸对其进行初始化:

char filename[50]; // An array that can hold 49 characters plus a NULL terminator

或动态尺寸:

size_t size = whatever_you_want;
char *filename = new char[whatever_you_want];
// make sure to delete[] filename when you're done

您应该知道,如果您尝试在字符串中放入的数据多于分配给它的数据,那么会导致一个名为buffer overflow的巨大安全漏洞(如果您很幸运的话)会导致程序崩溃。

或者您可以轻松地使用string

string filename;
cin >> filename;

这最后一种方式可能是最好的,因为您不需要担心缓冲区溢出错误,就像您自己处理字符串大小一样,并且您不需要处理delete它当你完成后,string会自动为你处理。

您始终可以使用c_str() function转换为C字符串(char*),但我建议仅使用它来向后兼容无法处理string参数的函数