error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ in initialization
error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ in initialization
我正在研究 C++(我有 COBOL、Perl 和 PHP 背景),我在拆分字符串时遇到问题,以便我可以对每个已解析的字段执行操作。我认为问题在于我对 C++ 如何处理变量缺乏理解。
我已经成功地将一个文件的内容放入一个数组中,我可以对每一行进行操作(例如 search/replace 文本)。我还找到了一些关于如何解析字符串的很好的例子。当我尝试将解析示例应用于数组中的字符串时出现问题。
字符串是通过以下方式创建的:
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];
给出 "error: initializer fails to determine size of ‘myString’"
如果我尝试使用 "std::string" 进行转换(如本网站其他答案中所建议):
std::string File_Line;
File_Line = File_Lines[array_counter];
char myString[] = File_Line;
...我得到同样的错误。
其他答案建议将代码调整为:
char *myString = File_Line;
但这只是给了我 "error: cannot convert ‘std::string {aka std::basic_string}’ to ‘char*’ in initialization"
我知道问题是由于我自己的无知造成的,但我非常感谢任何有关如何将字符串输入解析器的帮助。
此外,如果有人对如何在数据类型之间进行转换有任何简单的解释,那就太好了。
使用以下内容:
const char * myString1 = File_Lines[array_counter].c_str();
char * myString=const_cast<char*>myString1;
这应该没问题:
std::string ThisLine = File_Lines[array_counter]; // make a copy for strtok to mess up
char *p = strtok(&ThisLine[0], " "); // strtok needs a pointer to the first character
while (p) {
printf ("Token: %s\n", p);
p = strtok(NULL, " ");
}
但是 C++ 有比 strtok 更好的标记化方法。例如,std::strstream
和 operator>>
(对于空白定界符)或 getline
(对于您指定的定界符)。
我正在研究 C++(我有 COBOL、Perl 和 PHP 背景),我在拆分字符串时遇到问题,以便我可以对每个已解析的字段执行操作。我认为问题在于我对 C++ 如何处理变量缺乏理解。
我已经成功地将一个文件的内容放入一个数组中,我可以对每一行进行操作(例如 search/replace 文本)。我还找到了一些关于如何解析字符串的很好的例子。当我尝试将解析示例应用于数组中的字符串时出现问题。
字符串是通过以下方式创建的:
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];
给出 "error: initializer fails to determine size of ‘myString’"
如果我尝试使用 "std::string" 进行转换(如本网站其他答案中所建议):
std::string File_Line;
File_Line = File_Lines[array_counter];
char myString[] = File_Line;
...我得到同样的错误。
其他答案建议将代码调整为:
char *myString = File_Line;
但这只是给了我 "error: cannot convert ‘std::string {aka std::basic_string}’ to ‘char*’ in initialization"
我知道问题是由于我自己的无知造成的,但我非常感谢任何有关如何将字符串输入解析器的帮助。
此外,如果有人对如何在数据类型之间进行转换有任何简单的解释,那就太好了。
使用以下内容:
const char * myString1 = File_Lines[array_counter].c_str();
char * myString=const_cast<char*>myString1;
这应该没问题:
std::string ThisLine = File_Lines[array_counter]; // make a copy for strtok to mess up
char *p = strtok(&ThisLine[0], " "); // strtok needs a pointer to the first character
while (p) {
printf ("Token: %s\n", p);
p = strtok(NULL, " ");
}
但是 C++ 有比 strtok 更好的标记化方法。例如,std::strstream
和 operator>>
(对于空白定界符)或 getline
(对于您指定的定界符)。