於是,我嘗試寫會返回一個vector<char**>
的功能,因爲這樣的:C++的char *解析
vector<char**> test(string mystr) {
char*temp=new char[mystr.size()+1];
strcpy(temp,mystr.c_str());
char*subStr=strtok(temp,":");
while(subStr!=NULL) {
int i=0;
char**args=new char*[200];
char*tempsta=newchar[strlen(subStr)+1];
strcpy(tempsta, subStr);
args[i]=strtok(tempsta," ");
while(args[i]!=NULL) {
i++;
args[i]=strtok(NULL," ");
}
fullVec.push_back(args);
//cout<<subStr<<endl;
subStr=strtok(NULL,":");
}
return fullVec;
}
所以我想split
參數字符串了":"
分隔符,然後用「」分隔符。在撥打cout<<subStr
的電話時,如果我註釋掉int i=0
到fullVec.push_back(args)
之間的所有內容,我會收到預期的結果。如果我沒有註釋掉所有這些行,我只會得到第一個substring
(直到遇到第一個「:」),然後最大的while循環退出。
的期望是什麼我的意思;讓我們假設參數是「我的名字是:邦喬維:XXX AB」 如果一切被註釋掉,下面的線將被打印出來:
my name is
bon jovi
xxx ab
如果我離開它是,會發生什麼事是隻
my name is
將打印,和大循環將退出
任何幫助表示讚賞,謝謝! (是的,我知道,這似乎是一個愚蠢的練習,可以更優雅地做/易... ...但是我想獲得這個解決方案工作,我招待用串等)之前
混合使用C和C++製造令人討厭的錯誤代碼 – Abhijit 2013-02-16 17:14:58
你不會免費*任何*新的內存...... – nneonneo 2013-02-16 17:15:07
只要你正在編寫C++代碼,就儘可能避免寫C風格的代碼。如果你沒有很好的理由來使用'char *',那麼只需使用'std :: string'。 – LihO 2013-02-16 17:16:40