Voila j'ai un probleme de concaténation que je n'arrive pas à résoudre
vec est de type vector<string>
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcat(vec[1], "chaine");
Voila j'ai un probleme de concaténation que je n'arrive pas à résoudre
vec est de type vector<string>
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcat(vec[1], "chaine");
vec[1] += "chaine"
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
oui mais quand j'execute le programme, l'invite de commande plante...
strcat c'est une fonction de la bibliothèque c standart.
string c'est un objet de la bibliothèque c++ standart.
oui avec la version de medinoc l'invite de commande plante et avec ma méthode ça compile pas...
Donc ca doit planté ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part cout << vec[1] << endl;
Faudra que tu montres plus de code pour qu'on puisse comprendre ou ça plante.
C'est quoi le message d'erreur / l'exception levée lors du plantage ?
programme.exe a rencontré un probleme et doit fermé, voulez vous envoyer un rapport d'erreur a windows...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 void Trouver_Les_Autocad(void) { vector<string> vec; maCleRegistre clAutocad; long nbSousCles; int choix; if (! clAutocad.ouvrir(HKEY_LOCAL_MACHINE,"Software\\Autodesk\\AutoCAD",KEY_ALL_ACCESS)) return; if (! clAutocad.TrouvernbSousCles(nbSousCles)) return; char nomSousCle[2048]; char nomInterneInstallation[2048]; char nomVersion[2048]; char cheminInstallation[2048]; for (long i=0;i<nbSousCles;i++) { long tailleSousCle=2048; if (clAutocad.nomSousCle(i,nomSousCle,tailleSousCle)) { // On va ouvrir la sous clé, et voir combien d'installations de cette version d'autocad ont été // installées maCleRegistre cleVersionAutocad; if (! cleVersionAutocad.ouvrir(clAutocad,nomSousCle,KEY_ALL_ACCESS)) continue; long nbVersionsInstallees; if (! cleVersionAutocad.TrouvernbSousCles(nbVersionsInstallees)) continue; //cout << "il y a " << nbVersionsInstallees << " version d'autocad installee" << endl; //cout << "laquelle voulez-vous lancer : " << endl << endl; for (long j=0;j<nbVersionsInstallees;j++) { long tailleNomInterneInstallation=2048; if (cleVersionAutocad.nomSousCle(j,nomInterneInstallation,tailleNomInterneInstallation)) { // // On va maintenant prendre le nom de l'installation // ainsi que le chemin. donc, voir AcadLocation et ProductName // maCleRegistre cleInstanceInstallee; if (! cleInstanceInstallee.ouvrir(cleVersionAutocad,nomInterneInstallation,KEY_ALL_ACCESS)) continue; DWORD lgNomVersion=2048; DWORD lgCheminInstallation=2048; if (cleInstanceInstallee.valeurChaine("AcadLocation",(BYTE *)nomVersion,lgNomVersion) && cleInstanceInstallee.valeurChaine("ProductName",(BYTE *) cheminInstallation,lgCheminInstallation)) { cout << i+1 << " : " << cheminInstallation << endl; vec.push_back(nomVersion); } } } } } vec[1] += "\\acad.exe"; cout << vec[1] << endl; }
Tu as un débuggeur, alors utilises-le !
Oui, utilise le debugueur pour connaitre la valeur de vec[1].
Tu peux aussi mettre ton cout<<vec[1] dans un bloc try ... catch
J'ai repris ton code, et chez moi ca marche, du moins quand j'execute ceci :
La console affiche : Nom de la version\acad.exe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 vector <string> vec; char nomVersion[2048]="Nom de la version"; vec.push_back(nomVersion); vec[0] += "\\acad.exe"; cout<<vec[0];
Peut-etre que les push_back ne sont pas effectués, et donc lorsqu'on veut accéder a vec[1] ça plante.
D'ailleurs ... pourquoi vec[1] ?
Partager