gpt4 book ai didi

C++:辛>> *字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:58 24 4
gpt4 key购买 nike

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

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

当我使用命令行参数时,这非常有效;但是,每当我不这样做时,只要我启动程序,它就会出现段错误。我使用实际文件名的地方是在保存命令中:

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* filenamestd::string filename (和 #include <string> )。

然后要打开输出文件,您需要一个 C 风格的字符串(空终止 char 数组)。 std::string有这个功能。你会写

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

或者,事实上,如果您可以使用具有 c++11 功能的最新编译器,您甚至不需要使用 c_str() .一个新的 std::ofstream constructor已添加接受 std::string .

关于C++:辛>> *字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17501092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com