我不知道到底是什么问题。我收到一条错误消息,说我需要初始化我的 char* 文件名,但是如果我将它初始化为 NULL,我还会收到另一个错误吗?
我的主要功能中有这个:
char * filename;
cout << "Enter the name of the graph file: ";
cin >> filename;
readgraph(filename, 1);
这是 readgraph 函数:
我不知道到底是什么问题。我收到一条错误消息,说我需要初始化我的 char* 文件名,但是如果我将它初始化为 NULL,我还会收到另一个错误吗?
我的主要功能中有这个:
char * filename;
cout << "Enter the name of the graph file: ";
cin >> filename;
readgraph(filename, 1);
这是 readgraph 函数:
问题是指针只指向一个包含内存的空间。在您的代码中,文件名是(在这里挥手)一个指向字符数组的指针,但您实际上从未给它任何指向的东西。
您可以使用特定大小对其进行初始化:
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
但是你应该知道,如果你试图在字符串中放入比分配的更多的数据,它会导致一个巨大的安全漏洞,称为缓冲区溢出,这(如果你幸运的话)会导致你的程序崩溃.
或者你可以用简单的方法做到这一点并使用string
:
string filename;
cin >> filename;
最后一种方法可能是最好的,因为您不需要像自己处理字符串大小那样担心缓冲区溢出错误,并且在完成后也不需要处理delete
它,因为string
句柄自动为您服务。
您始终可以使用functionchar*
转换为 C 字符串 ( ) ,但我建议仅使用它来向后兼容无法处理参数的函数。c_str()
string