C++ struct et les chaînes de caractères

Résolu/Fermé
dodoecchi Messages postés 454 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 26 avril 2012 - 13 juil. 2010 à 23:30
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 juil. 2010 à 11:25
Bonsoir à tous,
ça a l'air stupide mais j'arrive pas à mettre une chaîne de caractère dans une structure!


#include "stdafx.h"
#include <cstdlib>

int main(void)
{
	typedef struct { char machin[50]; } test;
	test abc;
	abc.machin="test";
	printf("%s\n", abc.machin);
	std::system("PAUSE");
}


L'erreur :
1>c:\users\....cpp(12) : error C2440: '=' : impossible de convertir de 'const char [5]' en 'char [50]'


merci d'avance,
Dorian

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 juil. 2010 à 00:40
Bonjour,

En C/C++, tu ne peux utiliser l'opérateur d'affectation (=) pour affecter une chaîne de caractère qu'à la déclaration.
Donc :
char machin[10];
machin="test"; /*erreur, celle que tu as*/

mais
char machin[10]="test"; /*ok, ça marche*/


Si tu souhaites affecter le tableau machin par la suite, il te faudra utiliser la fonction strcpy (ou strncpy, mieux sécurisé).
Ce qui donnera : strcpy(machin, "test");
Mais en C++, on évite généralement d'utiliser les tableaux de char (utilisé en C) puisque le paradigme objet a permis la création de la classe "string". Cette dernière te permettra d'utiliser le signe d'affectation.

Si tu souhaites plus de précision, n'hésite pas.

Cdlt,
2
dodoecchi Messages postés 454 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 26 avril 2012 29
14 juil. 2010 à 09:15
Merci, strcpy fonctionne
Par contre, si j'utilise
 typedef struct { std::string machin; } test;

le signe d'affectation n'a pas l'air de faire effet : le prinft affiche (null)
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 14/07/2010 à 09:30
Salut,
je suis pas expert en c++, mais pourquoi ne pas utiliser cout au lieu de printf??
#include <iostream> 
#include <string> 
using namespace std; 
int main(void) 
{ 
 typedef struct { string machin; } test; 
 test abc; 
 abc.machin="Hello"; 
 cout<<abc.machin<<endl; 
return 0;
} 

sinon pour printf, cela devrait faire l'affaire...:
#include <iostream> 
#include <string> 
using namespace std; 
int main(void) 
{ 
 typedef struct { string machin; } test; 
 test abc; 
 abc.machin="Hello"; 
 printf("%s\n",(char*)&abc.machin[0]); 
return 0;
} 

@+
0
dodoecchi Messages postés 454 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 26 avril 2012 29
14 juil. 2010 à 09:50
chuka, ton code est magique =]
mais je crois bien que je vais utiliser cout maintenant. Quel bordel pour afficher une string
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 juil. 2010 à 11:25
De toute façon, il ne fuat pas confondre C et C++ ;-).
En C++, on utilise plutôt cout (au lieu de printf), cin (au lieu de scanf), string (au lieu de char []), etc.
Cdlt,
0
Utilisateur anonyme
13 juil. 2010 à 23:34
Salut !

Ta chaine ne fait que 5 caractères par rapport à la déclaration 50 caractères. (4 lettres + une).

Je ne me rappelle plus de ce qu'il faut faire, mais essaies avec une allocation normale, avec le string de Qt par exemple, ou alors fais en sorte que la longueur soit dynamique ...

Excuse-moi si je me trompe :S
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 juil. 2010 à 00:33
Utiliser une bibliothèque graphique pour une chaîne de caractère ? :D.
0
Utilisateur anonyme
14 juil. 2010 à 00:42
Tu rigoles mais Qt a une excellente classe pour le string.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 juil. 2010 à 00:50
Je sais bien que sa classe est excellente. Je dis juste qu'utiliser Qt juste pour gérer ça, c'est inutile ^^.
0