2012-06-28 4 views
1

J'essaie de repousser un const char* dans un vecteur dans un forloop. char_temp est une structure appelée segment, et chars_temp est un vecteur de structures. Voir mon code ci-dessous:push_back const char *

for (int bg = 0; bg < str.size(); bg++) { 
    string sym(1, str[bg]); 
    const char* bg_cc; 
    bg_cc = sym.c_str(); 

    char_temp.symbol_first = bg_cc; 
    char_temp.symbol_second = "*"; 

    chars_temp.push_back(char_temp); 
} 

Le problème est que la poussée omble chevalier est soutenu par un pointeur, de sorte que le char_temp.symbol_first se compose de la même adresse. La structure a besoin d'un const char* pour char_temp.symbol_first, alors comment puis-je remplir ce vecteur avec différentes adresses dans le forloop? J'ai essayé const char* bg_cc = new char dans le forloop, mais bg_cc conserve la même adresse.

Merci d'avance!

Répondre

3

J'ai essayé const char * bg_cc = new char dans le forloop, mais bg_cc garde la même adresse.

C'est bien, c'est quelque peu attendu. Ce qui est important, c'est qu'il points à des adresses différentes.

Vous devez utiliser char* bg_cc = new char puis strcpy de sym.c_str() pour créer une copie, non seulement affecter le pointeur à sym.c_str().

+0

Cela fonctionne en copiant le caractère. Merci beaucoup! – Rogier

+0

@Rogier pas de problème. –

1

1) L'objet sym serait détruit après chaque itération "for". Et les pointeurs bg_cc et char_temp.symbol_first deviennent invalides. Vous devez allouer de la mémoire dans chaque itération «pour» pour le pointeur bg_cc. Possible avec l'opérateur new. Etes-vous sûr d'avoir besoin de const char* ici? Peut être célibataire char sera suffisant?

2) Il semble que vous mettiez le même objet dans le conteneur chars_temp. Vous devez allouer de la mémoire pour l'objet char_temp dans chaque itération de boucle.