C++ struct et les chaînes de caractères
Résolu
dodoecchi
Messages postés
449
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir à tous,
ça a l'air stupide mais j'arrive pas à mettre une chaîne de caractère dans une structure!
L'erreur :
merci d'avance,
Dorian
ç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
-
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*/
maischar 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,-
-
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; }
@+ -
-
-
-
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