C ++:cin>> *字符

时间:2013-07-06 08:18:09

标签: c++ cin ofstream argc

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

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

当我使用命令行参数时,这非常有效;但是,每当我没有,只要我启动程序,它就会出现Segmentation Faults。我使用实际文件名的地方在save命令中:

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

哪个也很好用。有什么办法可以帮助我吗?正在审核的完整源代码在https://github.com/GBGamer/SLED

2 个答案:

答案 0 :(得分:2)

问题是char* filename只是指向某些包含字符的内存的指针。它本身没有任何记忆。 当您使用命令行参数时,程序会处理在某处存储该字符串,并获得指向它的指针。当您尝试使用cin >> filename进行阅读时,实际上并不存储任何存储读取数据的内容。

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

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

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

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

答案 1 :(得分:0)

当提供命令行参数时,filename变量指向argv[1],它不需要分配内存,但是当进入else块时,您没有为{分配内存{1}}。它只是一个指针。

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

filename