错误:无法在初始化</char>中将'std :: string {aka std :: basic_string <char>}'转换为'char *'

时间:2015-01-10 22:06:05

标签: c++ arrays string parsing char

我正在修补C ++(我有一个COBOL,Perl和PHP背景)并且我在分割字符串时遇到问题,这样我就可以对每个已解析的字段执行操作。我认为问题在于我对C ++如何处理变量缺乏了解。

我已经成功地将文件的内容插入到数组中,并且我可以对每个完整的行进行操作(例如,搜索/替换文本)。我还发现了一些如何解析字符串的很好的例子。当我尝试将解析示例应用于我的数组中的字符串时,会出现问题。

字符串通过以下方式创建:

    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 {aka std :: basic_string}'转换为'char *'”

我知道问题是由于我自己的无知,但我非常感谢有关如何将字符串输入解析器的任何帮助。

另外,如果有人对如何在数据类型之间进行转换有任何简单的解释,那就太棒了。

2 个答案:

答案 0 :(得分:3)

这应该没问题:

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(用于指定的分隔符)。

答案 1 :(得分:0)

使用以下内容:

const char * myString1 = File_Lines[array_counter].c_str();
char * myString=const_cast<char*>myString1;