Myvar = new string

Signaler
Messages postés
10
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
31 mars 2008
-
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
typedef char string[100];
string *ligne;

...

main()
{
ligne = new string [2] // je crée donc 2 string, només ligne[0], ligne[1]
...

plus tard, il me faut un troisième ligne (ligne[2]), pour cela, je dois écrire :
ligne = new string [1] (car je souhaite crée UN nouvel élément)

ou bien

ligne = new string [3] car je rajoute un élément qui sera la 3ème position ?

il me semble plus logique de tapper ligne = new string [1] mais ca a l'air de faire quelques soucis.
si qqn pouvait m'éclairer, ca serait trankilou :)

merci d'avance,
Xavier
}

3 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
tu voudrais faire pointer *ligne a une autre adresse + tard ?
nenni, ce sera la cata. Si tu dois allouer au cours du prog fais une liste chainee de pointeurs *ligne mais tu ne vas pas reallouer sur le meme sinon tu ne pourras pas desallouer correctement.
BruNews, ciao...
Messages postés
10
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
31 mars 2008

int maxlignes=0;

void open_file()
{
char buffer[100];
ifstream monfichierdepute ("bazar.txt");
if (! monfichierdepute.is_open())
{
cout << "Y a pas eu moyen d'ouvrir l'enroule";
exit (1);
}
while (! monfichierdepute.eof())
{
ligne = new string [(maxlignes+1)];
monfichierdepute.getline(buffer,100);
ligne[(maxlignes++)]=buffer;
cout << "maxlignes: " << (maxlignes-1) << " * " << ligne[(maxlignes-1)]<< "* buffer : " << buffer<< endl;
}
}

voila le morceau de code en fait, je dois mettre chaque ligne de mon fichier ds un string, seulement je ne sais pas cmb de lignes j'ai, c'est la raison pour laquelle je souhaite crée un nouveau string ligne à chaque passage, sinon au pire, j'ai qu'à passer une fois pour compter le nb de lignes, crée tous mes strings et refaire un deuxièume passage pour les remplir, ct juste pour savoir si c'est possible de les créer au fur et à mesure, (juste pour économiser un passage quoi...)
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Pourquoi ne pas utiliser un containeur vector ou list proposé par la STL ?

#include <string>
#include <vector>

using namespace std;

// Déclaration d'un vecteur contenant des pointeurs vers des objets string
vector<string *> m_vecStr;

char buffer[100];
ifstream monfichierdepute ("bazar.txt");
if (! monfichierdepute.is_open())
{
cout << "Y a pas eu moyen d'ouvrir l'enroule";
exit (1);
}
while (! monfichierdepute.eof())
{
monfichierdepute.getline(buffer,100);

m_vecStr.push_back(new string(buffer));

}

Consultes une documentation de la STL ou la MSDN pour connaitre les méthodes implantées dans l'objet vector.

Kaid - kaid.fr.st