Erreur: incompatible types assignement en C

Fermé
groomer Messages postés 49 Date d'inscription vendredi 11 juillet 2008 Statut Membre Dernière intervention 29 janvier 2009 - 18 nov. 2008 à 22:29
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 nov. 2008 à 23:21
Bonjour,
Dans le cadre d'un projet je suis bloqué sur une erreur de d'incompatibilité de type:
svp aidez moi !

L'erreur :
t.nom=nomSaisi; incompatible types assignement
Pourtant j'ai l'impression de mettre un char nomSaisi[51] dans char nom[51]



typedef struct personne{    //declaration de la structure personne
    char nom[51];              //declaration du tableau nom de 50
    char tel[11];                //declaration du tableau tel
    struct personne *suivant;
    struct personne *precedent;
    }pers;


//fonction ajouter entree
pers ajoutEntree(){
    char nomSaisi[51];
    char numeroSaisi[11];
    //creation de l'entree t
    pers t;
    
    //demande du nom et du tel
    printf("saisir le nom:");
    scanf("%c",nomSaisi); //recuperation clavier du nom

    printf("saisir le numero:");
    scanf("%c",numeroSaisi); //reccuperation clavier du numero 

    t.nom=nomSaisi; //on charge dans l'entree le nom 
    t.tel=numeroSaisi;

    return t;
    }

2 réponses

Droopy_ Messages postés 248 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 17 janvier 2009 25
18 nov. 2008 à 23:08
Bonjour,

Non, tu mets un pointeur dans un tableau
(un char* dans un char [51])

Il faut utiliser la fonction strncpy (pas strcpy elle peut déborder)
strncpy(t.nom, nomSaisi, 51);

cela copie la chaine de caracteres de nomSaisi dans t.nom
2
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 nov. 2008 à 23:21
+1 pour Droopy_.
Je rajouterai également qu'avec : scanf("%c",nomSaisi)</ital tu rajouterais qu'un caractère. C'est pas ce que tu veux (enfin je pense ^^).
Utilise plutôt : <ital>fgets(nomSaisi,sizeof nomSaisi,stdin
;)

Par ailleurs, c'est dommage de gaspiller deux tableaux pour ça. Tu peux très bien faire fgets(t.nomSaisi, sizeof(t.nomSaisi),stdin); ;)
Cdlt
0