Passer par adresse un vecteur à 2 dimensions + malloc [ C++ ] - C++ - Programmation
Marsh Posté le 12-05-2005 à 16:12:16
puisque tu fais du C++, uses et abuses de la SL, commence par construire un std::istringstream a partie du contenu du buffer
travail avec std::string, std::vector...
la doc de std::istringstream se trouve sur cplusplus.com (reference->iostream library)
Marsh Posté le 12-05-2005 à 16:18:54
ok merci, je vais jeter un oeil, sinon j'avais commencé à regarder les CString et virer tous les char * .
Ca commence à me donner mal au crâne toutes ces étoiles
Marsh Posté le 12-05-2005 à 16:27:53
utilises de preferences std::string et tout ce qui est standard (iostream, STL), tu verras c'est beaucoup plus simple
Marsh Posté le 13-05-2005 à 14:59:22
J'ai modifié un peu mon code.
Pour l'instant je teste à l'intérieur de la fonction, j'ai donc viré le paramètre "char *** MSG".
Je teste les vecteurs. J'ai eu un peu de mal à trouver de la doc sur des vecteurs à deux dimensions et j'aimerai bien savoir ce qu'il contiennent (le débuggeur ne me montre que la première case de ma première colonne ).
Vous aurez aussi remarqué qu'il traîne encore deux char * dont je n'arrive pas à me débarasser "*cMSG" et "buffer".
En fait mon soucis c'est de concaténer MSG[0][j] avec bytes[i] sachant que bytes[i] est un seul caractère (pas de char de fin de châine donc ... d'où la bidouille vers buffer qui est une chaine de deux charactère (bytes[i] et fin de chaine) et de passer par cMSG comme intérmédiaire.
J'aimerai supprimer celà mais je n'ai pas trouvé comment .
Et dernière chose, je n'arrive aps à afficher mes MessagesBox (ca me sort une erreur à l'éxecution donc ca doit pas prendre les bons paramètres).
MessageBox(NULL,MSG[j][0],TEXT("test" ),MB_OK);
Il faut que je passe un LPCTSTR mais j'ai essayé(LPCTSTR)MSG[j][0],LPCTSTR(MSG[j][0]) ca marche pas mieux ... (dans le dernier cas ca freeze l'émulateur PocketPC ... sinon ca crash)
En gros je butte sur des détails
P.S. Ca vire un peu au C++ ce topic
Marsh Posté le 16-05-2005 à 13:26:34
Je cherche également un moyen de désalouer "MSG".
Pour un vecteur j'ai trouvé mais là c'est un vecteur de vecteurs et je sèche
Merci
Marsh Posté le 16-05-2005 à 14:17:42
ReplyMarsh Posté le 16-05-2005 à 15:38:32
j'aimerai bien utiliser <iostream> et ton "istringstream" de la "SL" mais c'est du dev pocket PC et cette librairie ne figure pas dans le SDK PPC2003 ... Je peux éventuellement l'inclure à la main mais je ne garanti pas que ca fonctionne ...
et je vois pas trop en quoi je perds mon temps avec les vecteurs puisque ca semble correspondre à ce que je cherche pour ranger mes données et que tu m'en as parlé toi même
Je vais commencer par passer les CString en string histoire de faire un truc plus "standard" .
Marsh Posté le 16-05-2005 à 15:45:31
vector<vector<string> > MSG; c'est ok, nul besoin de désalouer explicitement quoi que ce soit
Marsh Posté le 16-05-2005 à 16:34:53
ok pour les vecteurs merci
par contre j'ai essayé de passer les CString en string mais ca m'arrange pas trop en fait car après je passe mon temps à fare des conversions entre les objets pour l'affichage qui prennent des CString et les traitements en std::string ...
D'après ce que j'ai "compris" c'est un type propre aux MFC ces CString ?
Marsh Posté le 12-05-2005 à 15:39:22
Bonjour
Ahhh ! Ces fameux pointeurs, je ne sais pas si un jour j'y arriverai.
J'en arrive à aimer VB avec ses "ByRef MSG(,) As String" ...
Pour résumer la situation, je dois adapter un boût de code initialement écrit en VB vers du code C++.
J'utilise pour celà eVC++ (le C++ pour Pocket PC dirons nous).
J'en arrive à mon problème.
Une connection est établie entre le pocket PC et un serveur.
Le Pocket PC envoie des requêtes SQL au serveur et le serveur renvoie une chaîne de caractères.
Cette chaîne de caractère contient les résultats de mon recordset concatenés et séparé par "~~" (double tilde, caractère 126) entre chaque enregistrements et "^" entre chaque champs.
Jusque là tout va bien, je récupère ma chaîne concatenée sur le PocketPc qui contient le résultat de ma requête.
Il me reste donc à découper cette chaîne via ma fonction "decoupage".
Ne sachant pas trop comment m'y prendre, j'ai choisi d'utiliser des tableaux de chaînes de caractères à deux dimensions (du C donc).
La première contenant les lignes et la seconde contenant les colonnes.
C'est là que ca se corse.
Dans ma chaîne concatenée, il y a un entête.
ex : "25~~3~~"
Cet entête signifie que j'ai 25 enregistrements de 3 colonnes.
J'extrait donc ces caractères, je fait la conversion en numérique et j'obtiens mes deux variables ligne et colonne.
Et à partir de ces deux valeurs, je veux dimensionner un tableau passé par adresse à ma fonction "découpage".
Par la suite je vais donc parcourir ma chaîne concatenée à la recherche de mes résultats et les stocker dans mon tableau à deux dimensions.
Pour ce faire, dans un premier temps je ne m'occupe que de la séparation des lignes.
Voici le code correspondant, il refuse de compiler sur "strcat".
'strcat' : cannot convert parameter 1 from 'char ** ' to 'char *'
Mais je suis tellement mauvais que le code est peut être entièrement à revoir ...
P.S. Si il existe une solution moins lourde pour gérer les chaînes et qui permette la réallocation dynamique, je suis preneur.
Message édité par jeoff le 16-05-2005 à 13:27:46