C++:>> *字符

C++: cin >> *char

本文关键字:gt 字符 C++      更新时间:2023-10-16

因此,我目前正在编写一个行编辑器,作为I/O、编写文件等方面的学习项目。它是用C++编写的,我目前正在尝试编写一个用户选择的文件。我已经实现了CLI参数,但我目前不知道如何在程序中实现指定要写入的文件的方式

char *filename;
if (argc >= 2){
        filename = argv[1];
} else{
        cout << "file>";
        cin >> filename;
        cin.ignore();
}

当我使用命令行参数时,这非常有效;然而,每当我不这样做时,只要我启动程序,它就会出现分段故障。我使用实际文件名的位置在save命令中:

void save(char filename[], int textlen, string file[]){
        ofstream out(filename);
        out << filestring(textlen, file);
        out.close();
}

这也非常有效。你有什么办法可以帮我吗?完整的源代码,供审查,正在更新https://github.com/GBGamer/SLED

问题是char* filename只是指向某些包含字符的内存的指针。它本身没有任何内存。当你使用命令行参数时,程序会处理将该字符串存储在某个地方,然后你会得到一个指向它的指针。当你尝试使用cin >> filename读取时,实际上没有任何地方可以存储读取的数据。

解决方案:将char* filename替换为std::string filename(和#include <string>)。

然后,要打开输出文件,需要一个c样式字符串(以null结尾的char数组)。CCD_ 7对此具有功能。你会写

std::ofstream out(filename.c_str());
                           ^^^^^

或者,事实上,如果您可以使用具有c++11特性的最新编译器,那么您甚至不需要使用c_str()。添加了一个新的std::ofstream构造函数来接受std::string

当提供命令行参数时,filename变量指向argv[1],它不需要分配内存,但当进入else块时,您尚未将内存分配给filename。这只是一个指针。

使用mallocfilename分配一些内存,然后接受用户输入。

filename = (char *)malloc(sizeof(char)*(FILE_NAME_LENGTH+1))