1

我不知道到底是什么问题。我收到一条错误消息,说我需要初始化我的 char* 文件名,但是如果我将它初始化为 NULL,我还会收到另一个错误吗?

我的主要功能中有这个:

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

这是 readgraph 函数:

4

1 回答 1

4

问题是指针只指向一个包含内存的空间。在您的代码中,文件名是(在这里挥手)一个指向字符数组的指针,但您实际上从未给它任何指向的东西。

您可以使用特定大小对其进行初始化:

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

于 2013-04-03T02:29:10.040 回答