我正在修补C++(我有COBOL,Perl和PHP背景),而且我正在麻烦分裂一个字符串,以便我可以对每个解析字段进行操作。我相信麻烦在于我对C++如何处理变量缺乏了解。错误:无法在初始化中将'std :: string {aka std :: basic_string <char>}'转换为'char *'
我把文件的内容成功地映射到了一个数组中,我可以在每个完整的行上执行操作(例如搜索/替换文本)。我还发现了一些很好的如何解析字符串的例子。当我尝试将解析示例应用于数组中的字符串时,会发生此问题。
的字符串是通过创建:解析字符串
std::vector<std::string> File_Lines;
ifstream file(filename.c_str());
while (file.good()) {
getline (file, line, '\n');
string InputLine = string(line);
File_Lines.push_back(line);
}
一个工作示例(我在此网站上发现)为:
char myString[] = "The quick brown fox";
char *p = strtok(myString, " ");
while (p) {
printf ("Token: %s\n", p);
p = strtok(NULL, " ");
}
的问题,当我试图养活我的字符串开始到解析的代码。直接喂养它:
char myString[] = File_Lines[array_counter];
给“错误:初始化失败,以确定‘的myString’的大小”
如果我尝试使用“的std :: string”转换(如在其他答案建议本网站) :
std::string File_Line;
File_Line = File_Lines[array_counter];
char myString[] = File_Line;
...我得到同样的错误。
其他答案建议代码调整到:
char *myString = File_Line;
但只是给了我 “错误:在初始化不能转换 '的std :: string {又名性病:: basic_string的}' 到 '字符*'”
我知道这个问题是由于我自己的无知,但我真的很感谢任何帮助如何将字符串馈入解析器。
另外,如果任何人有任何简单的解释如何在数据类型之间进行转换,这将是很大的。
'char * myString = FileLines [array_counter] .c_str();'将编译。但是你应该知道当FileLines被销毁时(字段超出范围),字符串内容的内存将被释放。 – Inspired
只需坚持使用'std :: vector'和'std :: string'而不是C风格'char *'指针和数组的C++方式。它会让你的生活更轻松。如果你真的想在'std :: vector lines'中出现'char * lines []',你需要自己构造它(复制每个缓冲区)。没有自动转换。 –
5gon12eder
调用[std :: string :: c_str](http://www.cplusplus.com/reference/string/string/c_str/)从'std :: string'中获取'const char *'。使用字符串ctor做相反的事情。 – tux3