Programmation » [C++] Utilisation de la mémoire
Catégorie:  
Rappel du message précédent
   
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:15:04,
Par gizmo
MySQL c'est mal :oh:
Concept vivant.


   
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:20:18,
Par ovh
Ne jamais utiliser malloc et cie en C++ !
http://c.developpez.com/faq/cpp/?page=pointeurs#POINTEURS_pourquoi_new
Je n'ai rien à voir avec www.ovh.com
   
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:22:50,
Par philfr
SQL c'est mal... :oh:
   
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:23:50,
Par dede
Les choux de Bruxelles, c'est mal :oh:
   
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:26:07,
Par ovh
SQL c'est mal... :oh:

L'informatique c'est mal :itm:
Je n'ai rien à voir avec www.ovh.com
   
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 15:14:50,
Par blietaer
et faire un :

char *variable;
variable = row[3];

marche pas non plus, pourtant il s'afit d'un charactère des deux cotés (C++ et Mysql).
a moins que comme mysql le tape comme string, il a mis un zoli [\0] au bout?

je vais quand même pas faire un sprintf() pour un bête charactère?!
(en plus ca déborderait du *char).
Et au besoin s'arrêter.
   
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 17:07:30,
Par Altar
Si mysql renvoye des cstring, tu auras le \0 à la fin. En plus, je ne sais pas de quel type est ton tableau row mais ce que tu as écris me fait peur...

En supposant que row est de type char ** alors tu assignes l'addresse du pointeur variable à celle du pointeur row ce qui veut dire que row[3] et variable pointent vers la même zone mémoire, donc le même string. Donc un cout << row[3] << endl; ou un cout << variable << endl; revient à la même chose.
D'ailleurs un cout << row[3] << endl; t'affiches quoi ?

Si tu voulais copier ton string se trouve dans row[3], tu devrais d'abord allouer la mémoire pour variable en faisant variable = new char[strlen(row[3]+1)]; et ensuite y recopier le contenu en faisant strcpy(variable,row[3]); strcpy étant dans la librairie cstring.
   
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 17:15:40,
Par zion
Sinon la gestion de string en pascal, c'est facile :oh:

:neowen:
Je suis le Roy :ocube:
   
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 17:35:38,
Par Altar
Les strings c++ aussi :oh:

Blietaer > une solution serait aussi de simplement les copier dans des strings c++ qui sont quand même largement plus facile à utiliser. ex: std::string x = row[3];
   
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 19:05:40,
Par pipo
Les choux de Bruxelles, c'est mal :oh:

La testostérone, c'est male.
./Make sex | ( . ) ( . ) | Je n'ai rien à voir avec Zion l'informaticien gay
   
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 20:23:46,
Par antp
Les strings c++ aussi :oh:

Ouais surtout quand tu dois sans arrête passer de CString à std::string, ou de AnsiString à std::string :dawa:
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
   
[C++] Utilisation de la mémoire
Publié le 15/04/2006 @ 14:01:20,
Par Altar
la méthode c_str() permet un fallback vers les cstring très facilement... je ne vois vraiment pas le problème.

De plus si tu perds un peu de temps à te faire un api pour le réseau (d'ailleurs ça doit se trouver déjà tout fait) tu es presque totalement débarassé des cstring...
   
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 00:10:00,
Par antp
Ça m'avait pas semblé super pratique les quelques fois où j'ai dû utiliser des chaînes en C++ :spamafote: Il y avait toujours un moment où j'avais des chaînes des deux types et je devais passer de l'un à l'autre.
Mais bon, je dis ça en comparaison des chaînes en Delphi. C'est sûr que par rapport aux char* les chaînes en C++ sont très pratiques :oh:

Et pour l'histoire d'API réseau, je vois pas le rapport :confused:

Dernière édition: 16/04/2006 @ 00:17:51
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
   
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 12:19:36,
Par 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 :wink: 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).
   
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 17:51:25,
Par 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...
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
   
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 19:03:37,
Par Altar
Ouais en même temps .net 1.1 est entièrement en iostream :smile: Faut vivre avec son temps.
   
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 19:44:56,
Par zion
antp for president :oh:

Y a que pour l'unicode ou il faut implicitement transformer le type si tu veux pas que ca foire trop :joce:
Je suis le Roy :ocube:
   
[C++] Utilisation de la mémoire
Publié le 17/04/2006 @ 18:33:24,
Par antp
Ouais en même temps .net 1.1 est entièrement en iostream :smile: Faut vivre avec son temps.

Ç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:
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:
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
   
[C++] Utilisation de la mémoire
Publié le 27/04/2006 @ 11:25:53,
Par 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:
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);


};


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...
Et au besoin s'arrêter.
   
[C++] Utilisation de la mémoire
Publié le 27/04/2006 @ 11:54:16,
Par ovh
Des char* et des printf dans un programme C++ :totoz: :ciler: :fumer:

this->zone_depart = row[2];

Faudrait pas plutôt faire un strcpy + initialisation mémoire ? :figti:
this->zone_depart = new char[strlen(row[2])];
strcpy(this->zone_depart, row[2]);

Dernière édition: 27/04/2006 @ 11:54:45
Je n'ai rien à voir avec www.ovh.com
   
[C++] Utilisation de la mémoire
Publié le 27/04/2006 @ 12:00:37,
Par 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:
Répondre - Catégorie:  
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?