可以说我试图解决字符串的解析问题char ** 由于某种原因,下面的代码会产生很多垃圾,谁可以看看吗?C++ char ** - > vector <string> - > string - > char **解析问题
- 下面是它应该做的事:
- 转储全部的argv成string_array 容器
- 转储在string_array 容器一切都变成的std :: string和 用空格
- 打破字符串放入字符串 使用增强/算法/字符串的令牌
- 创建一个新char **并将所有 标记转储到它中,打印出新的char **,clea n up
我做了什么错了?
#include <string>
#include <vector>
#include <iostream>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
typedef vector<string> string_array;
int main(int argc, char ** argv)
{
string_array args;
string_array tokens;
cout << "Real arguments :" << endl;
for(int i = 0; i < argc; i++)
{ cout << argv[i] << endl;}
string arg = "";
for(int i = 1; i < argc; i++)
{
args.push_back(argv[i]);
}
for(int i = 0; i < (int)args.size(); i++)
{
arg += args[i];
if(i != (int)args.size() - 1)
arg += " ";
}
split(tokens, arg, is_any_of(" "));
char ** new_args = NULL;
new_args = new char*[(int)tokens.size()];
for(int i = 0; i < (int)tokens.size(); i++)
{
new_args[i] = new char[(int)tokens[i].size()];
for(int j = 0; j < (int)tokens[i].size(); j++)
{
new_args[i][j] = tokens[i][j];
}
}
for(int i = 0; i < (int)tokens.size(); i++)
{ std::cout << new_args[i] << std::endl; }
delete [] new_args;
}
哪里和如何出错? – Mark 2009-10-12 15:59:50
另外,new_args的内存释放不正确。在一个循环中,你也必须删除new_args [i] – 2009-10-12 16:01:45
@aJ:大部分是正确的,但也必须使用删除的数组形式来删除'new_args [i]'。 :-) – 2009-10-12 16:06:45