[英]error: could not convert from 'std::string* {aka std::basic_string<char>*}' to 'std::string {aka std::basic_string<char>}'|
[英]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.