簡體   English   中英

錯誤:無法轉換&#39;std :: string {aka std :: basic_string <char> 初始化時&#39;&#39;到&#39;char *&#39;

[英]error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ in initialization

我正在修補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 *'”

我知道問題是由於我自己的無知,但我真的很感激有關如何將字符串提供給解析器的任何幫助。

此外,如果任何人對如何在數據類型之間進行轉換有任何簡單的解釋,那將是很好的。

這應該沒問題:

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 with operator>> (用於空格分隔符)或getline (用於指定的分隔符)。

使用以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM