Myvar = new string

Tyroflan Messages postés 10 Date d'inscription samedi 1 mars 2003 Statut Membre Dernière intervention 31 mars 2008 - 2 avril 2003 à 23:00
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 2 avril 2003 à 23:54
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 avril 2003 à 23:12
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...
0
Tyroflan Messages postés 10 Date d'inscription samedi 1 mars 2003 Statut Membre Dernière intervention 31 mars 2008
2 avril 2003 à 23:36
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...)
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
2 avril 2003 à 23:54
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
0
Rejoignez-nous