Bonjour,
j' ai comme erreur " cannot convert std::string to char* in asgnment " .
Comme code j'ai :
argv[1] = path;
Je ne sais pas comment convertir le string en char*.
Je vous remercie d'avance pour votre aide.
Version imprimable
Bonjour,
j' ai comme erreur " cannot convert std::string to char* in asgnment " .
Comme code j'ai :
argv[1] = path;
Je ne sais pas comment convertir le string en char*.
Je vous remercie d'avance pour votre aide.
Bonjour.
Pour récupérer le contenu d'un std::string sous la forme d'un char *, il existe la fonction std::string::c_str().
Donc dans ton exemple - je suppose que path est le string - tu auras argv[1] = path.c_str();.
En revanche je doute que ça va marcher, argv représente la liste des paramètres fournis aux programme, et ces paramètres sont normalement constant (non modifiable). Pourquoi voudrais tu modifier ce tableau ? Que veut faire ton code ?
Bonjour,
Merci pour ta réponse. J' ai bien essayé. J'ai comme erreur " cannot convert const char to char* " .Code:argv[1] = path.c_str();
En faite mon code, il se lance a partir d'un terminale avec une ligne de commande sous cette forme : fichier.exe | fichier texte| parametre 1| parametre 2 | parametre 3...
Apres l'avoir lancer il me genere 2 fichier txt.
Moi je veux le lancer directement à partir de mon IDE, voila ce que j'ai fait :
Comme ca je choisi mes paramètres, puis le code se lance directement.Code:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 double valeur1, valeur2, valeur3, valeur4, valeur5, valeur6, valeur7; // Si l'utilisateur n'a pas rentré un nombre correct de paramétres, on lui affiche le guide pour les rentrer if (m_argc < 5) { cout << "------------------------ choix des parametres ----------------------------------" << endl << endl; string numeroDeList; cout << "numero de la liste" << endl; cin >> numeroDeList; string fichierText = "Fastener_List_" + numeroDeList; string folderPath = "//sfs.corp/Projects/ENGINEERING/VULNERABILITY/F_EXT_PARTNERS_AREA/TRAINEES_AREA/2017/Fastener_Tools/Fastener_Behavior/Debug/"; string filePath = folderPath + fichierText; cout << "--------------------------------- Modeling -------------------------------------" << endl; cout << "1:Tension" << endl; cout << "2:Shear" << endl; cout << "3:Tension+Shear" << endl; cin >> valeur1; while (valeur1 != 1 && valeur1 != 2 && valeur1 != 3) { cout << "Ressayer: taper 1,2,3" << endl; cout << "1:Tension" << endl; cout << "2:Shear" << endl; cout << "3:Tension+Shear" << endl; cin >> valeur1; } if (valeur1 == 1) {modelling = "Tension";} if (valeur1 == 2) {modelling = "Shear";} if (valeur1 == 3) {modelling = "Tension+Shear";} cout << "-------------------------------- Behavior --------------------------------------" << endl; cout << "1:EL" << endl; cout << "2:EL+PL" << endl; cout << "3:EL+PL+R" << endl; cin >> valeur2; while (valeur2 != 1 && valeur2 != 2 && valeur2 != 3) { cout << "taper 1 ou 2 ou 3" << endl; cin >> valeur2; } if (valeur2 == 1) {behaviorType = "EL";} if (valeur2 == 2) {behaviorType = "EL+PL";} if (valeur2 == 3) {behaviorType = "EL+PL+R";} cout << "------------------------------ ShearStifness ----------------------------------" << endl; cout << "1:Beam" << endl; cout << "2:Huth" << endl; cin >> valeur3; while (valeur3 != 1 && valeur3 != 2 ) { cout << "taper 1 ou 2" << endl; cin >> valeur3; } if (valeur3 == 1) {KShear = "Beam";} if (valeur3 == 2) {KShear = "Huth";} cout << "---------------------------Torsion&BendingStiffness----------------------------" << endl; cout << "1:Beam" << endl; cout << "2:Rigid" << endl; cout << "3:Low" << endl; cin >> valeur4; while (valeur4 != 1 && valeur4 != 2 && valeur4 != 3) { cout << "taper 1 ou 2 ou 3" << endl; cin >> valeur4; } if (valeur4 == 1) {KBendingTorsion = "Beam";} if (valeur4 == 2) {KBendingTorsion = "Rigid";} if (valeur4 == 3) {KBendingTorsion = "Low";} cout << "---------------------------- TensileDeformation --------------------------------" << endl; cout << "1:PureTension" << endl; cout << "2:PureTension+PullTrough" << endl; cin >> valeur5; while (valeur5 != 1 && valeur5 != 2) { cout << "taper 1 ou 2 " << endl; cin >> valeur5; } if (valeur5 == 1) {tensileDef = "PureTension";} if (valeur5 == 2) {tensileDef = "PureTension+PullTrough";} cout << "----------------------------- ShearDeformation --------------------------------" << endl; cout << "1:PureBoltShear" << endl; cout << "2:PureBoltShear+Bearing" << endl; cin >> valeur6; while (valeur6 != 1 && valeur5 != 2) { cout << "taper 1 ou 2 " << endl; cin >> valeur6; } if (valeur6 == 1) {shearDef = "PureBoltShear";} if (valeur6 == 2) {shearDef = "PureBoltShear+Bearing";} cout << "--------------------------------- Coupling -------------------------------------" << endl; cout << "1:Uncoupled" << endl; cout << "2:Coupled" << endl; cin >> valeur7; while (valeur7 != 1 && valeur7 != 2) { cout << "taper 1 ou 2 " << endl; cin >> valeur7; } if (valeur7 == 1) {coupling = "Uncoupled";} if (valeur7 == 2) {coupling = "Coupled";} cout << filePath << " " << modelling << " " << behaviorType << " " << KShear << " " << KBendingTorsion << " " << tensileDef << " " << shearDef << " " << coupling << endl; m_argv[1]=filePath; m_argv[2]=modeling; m_argv[3]=behaviorType; m_argv[4]=KShear; m_argv[5]=KBendingTorsion; m_argv[6]=tensileDef; m_argv[7]=shearDef; m_argv[8]=coupling; m_argc = 9; }
Bonjour,
- Avant C++11: Copie ta string dans un vecteur de char, en faisant attention à la taille. Puis tu peux utiliser &monVecteur[0].
- Depuis C++11: &path[0] est censé marcher.
- Dans tous les cas: Attention à la durée de vie: Il ne faut pas que la string ou le vecteur soient détruits avant que tu aies fini de te servir des char*.
ce n'est pas argv mais m_argv.
Ca change beaucoup de chose.
Qu'est m_argv? qu'elle est sa déclaration et son utilisation?
Attention, string::c_str() n'est pas un pointeur valide au dela de l'expression. Tu ne dois jamais stoquer ce pointeur, mais appeler strcpy.
Attention aussi, appeler main dans un programme est interdit.