C++:>> *字符
C++: cin >> *char
因此,我目前正在编写一个行编辑器,作为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
。这只是一个指针。
使用malloc
为filename
分配一些内存,然后接受用户输入。
filename = (char *)malloc(sizeof(char)*(FILE_NAME_LENGTH+1))
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存