Poster une réponse à un sujet: [C++] Utilisation de la mémoire
Attention, ce sujet est un sujet ancien (6700 jours sans réponse)
ovh
Je suis d'accord avec ovh pour l'allocation de la mémoire mais mon petit ovh où mets-tu le '\0' ?? C'est strlen(row[2]+1);
![:oh: :oh:](images/smileys/oh.gif)
Oups c'est exact
![:tinostar: :tinostar:](images/smileys/tinostar.gif)
Longtemps que je n'ai plus manipulé de char* désolé
![:joce: :joce:](images/smileys/joce.gif)
blieataer> en effet, en C++ il existe une classe std::string et les fonctions qui vont bien pour manipuler les chaînes facilement :
#include <iostream> // oui, sans .h !
using namespace std;
string toto;
toto = "turlutte";
cout<<toto<<endl;
using namespace std;
string toto;
toto = "turlutte";
cout<<toto<<endl;
Et le lien qui va bien :
http://c.developpez.com/faq/cpp/?page=strings
![:dawa: :dawa:](images/smileys/dawa.gif)
L'avantage aussi c'est qu'avec ça tu peux facilement les trier, en utilisant les divers types de classes listes standards
![:oh: :oh:](images/smileys/oh.gif)
![:petrusbranle: :petrusbranle:](images/smileys/branle2.gif)
Bon codach'
![:fete: :fete:](images/smileys/fete.gif)
blietaer
MA-GNI-FIQUE!!
merci
heuuu oki pourle printf() je pourrais metre des >> cout...mais vraiment si grave?
et pour le char* si c'est une heresie, je veux bien un lien pour me punir.
encore merci
merci
heuuu oki pourle printf() je pourrais metre des >> cout...mais vraiment si grave?
et pour le char* si c'est une heresie, je veux bien un lien pour me punir.
encore merci
Altar
Je suis d'accord avec ovh pour l'allocation de la mémoire mais mon petit ovh où mets-tu le '\0' ?? C'est strlen(row[2]+1);
![:oh: :oh:](images/smileys/oh.gif)
ovh
Des char* et des printf dans un programme C++
Faudrait pas plutôt faire un strcpy + initialisation mémoire ?
![:totoz: :totoz:](images/smileys/totoz.jpg)
![:ciler: :ciler:](images/smileys/ciler.gif)
![:fumer: :fumer:](images/smileys/fumer.gif)
this->zone_depart = row[2];
Faudrait pas plutôt faire un strcpy + initialisation mémoire ?
![:figti: :figti:](images/smileys/figti.gif)
this->zone_depart = new char[strlen(row[2])];
strcpy(this->zone_depart, row[2]);
strcpy(this->zone_depart, row[2]);
blietaer
oublions l'aspect des tables et des DB..
Dans le main:
Autocar *bus = new Autocar[NOMBRE_DE_BUS_MAX];
Pat *patrouilles = new Pat[NOMBRE_DE_PAT_TOTAL];
init_all(bus, patrouilles);
"int init_all(Autocar *bus, Pat *patrouilles)" est juste une fonction qui va faire des "for(;;)" pour remplir les objects avec des données extraites de MySQL (ou autre DB).
Et elle le fait bien...:
this->numero_bus = numero;
this->capacite = strtol(row[4],&pEnd,0);
this->zone_depart = row[2];
this->CDZ_arrive = strtol(row[3],&pEnd,0) ;
Ma classe autocar:
Par contre, une fois l'object inspecté dans main(),
printf("le bus #3 part de %s avec %d personnes vers %d\n",bus[3].zone_depart, bus[3].capacite,bus[3].CDZ_arrive);
--> le bus #3 part de def avec 72 personnes vers 3
et "def" devrait être plutôt une lettre majuscule (ici en locurence "W")
Pourquoi?
espérons que j'ai été clair...
Dans le main:
Autocar *bus = new Autocar[NOMBRE_DE_BUS_MAX];
Pat *patrouilles = new Pat[NOMBRE_DE_PAT_TOTAL];
init_all(bus, patrouilles);
"int init_all(Autocar *bus, Pat *patrouilles)" est juste une fonction qui va faire des "for(;;)" pour remplir les objects avec des données extraites de MySQL (ou autre DB).
Et elle le fait bien...:
this->numero_bus = numero;
this->capacite = strtol(row[4],&pEnd,0);
this->zone_depart = row[2];
this->CDZ_arrive = strtol(row[3],&pEnd,0) ;
Ma classe autocar:
class Autocar {
public:
int numero_bus;
int capacite;
char *zone_depart;
int CDZ_arrive;
int places_restantes;
char *troupes_presentes[10][5];
int nbre_troupes_presentes;
Autocar(void);
~Autocar(void);
int init_autocar(int numero);
int ajouter_patrouille(int pat_id);
};
public:
int numero_bus;
int capacite;
char *zone_depart;
int CDZ_arrive;
int places_restantes;
char *troupes_presentes[10][5];
int nbre_troupes_presentes;
Autocar(void);
~Autocar(void);
int init_autocar(int numero);
int ajouter_patrouille(int pat_id);
};
Par contre, une fois l'object inspecté dans main(),
printf("le bus #3 part de %s avec %d personnes vers %d\n",bus[3].zone_depart, bus[3].capacite,bus[3].CDZ_arrive);
--> le bus #3 part de def avec 72 personnes vers 3
et "def" devrait être plutôt une lettre majuscule (ici en locurence "W")
Pourquoi?
espérons que j'ai été clair...
antp
Ouais en même temps .net 1.1 est entièrement en iostream
Faut vivre avec son temps.
![:smile: :smile:](images/smileys/smile.gif)
Ça me fait une belle jambe, le seul code C++ que j'ai à faire au boulot c'est en Visual C++ 5 et Builder C++ 5
![:ddr555: :ddr555:](images/smileys/ddr555.gif)
Puis ça ne change rien au fait que JE trouve que les chaînes Delphi sont plus pratiques. Qu'elles le soient ou non ça je n'en sais rien, c'est un avis personnel subjectif émis par moi-même
![:oh: :oh:](images/smileys/oh.gif)
zion
antp for president
Y a que pour l'unicode ou il faut implicitement transformer le type si tu veux pas que ca foire trop
![:oh: :oh:](images/smileys/oh.gif)
Y a que pour l'unicode ou il faut implicitement transformer le type si tu veux pas que ca foire trop
![:joce: :joce:](images/smileys/joce.gif)
Altar
Ouais en même temps .net 1.1 est entièrement en iostream
Faut vivre avec son temps.
![:smile: :smile:](images/smileys/smile.gif)
antp
Ouais enfin tout le GUI de C++Builder est en AnsiString, tout celui des MFC en CString, donc quand tu veux utiliser des std::string (parce que par exemple une lib en a besoin) tu dois forcément faire des conversions.
Sinon j'ai trouvé l'utilisation de tous ces types de chaînes moins pratiques que celles de Delphi, même sans les problèmes de conversion d'un type à l'autre...
Sinon j'ai trouvé l'utilisation de tous ces types de chaînes moins pratiques que celles de Delphi, même sans les problèmes de conversion d'un type à l'autre...
Altar
Et bien le rapport c'est que c'est le seul moment où j'ai vraiment eu besoin d'utiliser des char* c'est lors du développement réseau
Pour le reste on trouve facilement des API C++ qui utilise directement les iostream de c++ (pas forcement comme il faudrait, j'ai vu pas mal d'api qui recevait le char* et qui le castait en string mais au moins ils ont fait l'effort de faire une interface).
![:wink: :wink:](images/smileys/wink.gif)