于是,我尝试写会返回一个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