Disons que j'essaie de résoudre un problème d'analyse syntaxique de chaîne à caractère ** Pour une raison quelconque, le code ci-dessous génère beaucoup de poubelle, quelqu'un peut-il y jeter un coup d'œil s'il vous plaît?C++ char ** -> vecteur <string> -> string -> char ** problème d'analyse syntaxique
- Voici ce qu'il est censé faire:
- Dump tous argv dans un string_array contenant
- tout Dump dans le conteneur string_array dans un std :: string et avec des espaces
- Cassez les chaîne dans la chaîne jetons en utilisant boost/algorithme/chaîne
- créer un nouveau caractère ** et vider tous les jetons dedans, imprimer le nouveau caractère **, clea n up
Qu'est-ce que j'ai fait de mal?
#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;
}
Où et comment ça se passe mal? – Mark
En outre, la libération de la mémoire de new_args n'est pas correcte. dans une boucle, vous devez également supprimer new_args [i] –
@aJ: Correctement correct, mais aussi utiliser la forme array de delete pour supprimer 'new_args [i]'. :-) –