Menu

Assigner un char dans une structure.

Messages postés
102
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
13 mai 2019
- - Dernière réponse : [Dal]
Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
- 13 mai 2019 à 16:35
Bonjour,
Je tourne sur un problème depuis un bon moment et je ne parviens pas à en trouver la solution.
Je vous explique :
Le programme est un gestionnaire de contacts. Mon objectif est de permettre à un utilisateur d'ajouter un contact et qu'automatiquement l'initiale du nom soit assignée à une variable "initiale".

J'ai tenté ceci : (sachant que tab[ ] est la liste des contacts.)

printf("Ajout de contact :\n*Quel est son nom ? : ");
  scanf("%s", tab[0].nom);
  char init = tab[0].nom[0];
  strcpy(tab[0].init, init[]);


J'ai également tenté :

  char var[50];
  printf("Ajout de contact :\n*Quel est son nom ? : ");
  scanf("%s", var);
  char init[1] = var[0];
  strcpy(tab[0].nom, var);
  strcpy(tab[0].init, init);


L'erreur doit être très simple mais je suis incapable de la trouver, ou du moins de trouver une solution.
Voici comment est définie ma structure :

struct Contact{
  char nom[50];
  char init[1];
};


Et j'ai bien évidemment pensé à inclure string.h

Le compilateur me dit :
warning: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
strcpy(tab[0].init, var[0]);

Si quelqu'un avait une solution pour moi, ou ne serai-ce qu'une piste pour m'aider a comprendre ce que j'ai mal fait, je lui en serait très reconnaisant.
Merci,
Jockill
Afficher la suite 

Votre réponse

1 réponse

Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
937
0
Merci
Salut Jockill,

En C, un
char
est un type entier.

Une chaîne en C est une suite se
char
consécutifs en mémoire terminée par le caractère NULL
'\0'
, que l'on manipule avec un pointeur sur char ...

L'erreur que tu as se manifeste car tu mets en paramètre de
strcpy()
un type
char
, au lieu d'un type
char *
.

Vu qu'un
char
est un type entier, pour affecter le contenu d'une variable de type
char
à une autre variable du même type, tu utilises simplement l'opérateur d'affectation
=
.

Au final, voilà un exemple (affectation des initiales en ligne 18) :

#include <stdio.h>

struct Contact{
    char nom[50];
    char init;
};

int main(void) {
    /* un tableau de struct Contact avec des noms */
    struct Contact tab[3] = {
        { .nom = "Albert" },
        { .nom = "Bernard" },
        { .nom = "Charles" }
    };

    /* peupler les initiales */
    for (int n = 0; n < 3; n++) {
        tab[n].init = tab[n].nom[0];
    }

    /* lister les initiales */
    for (int n = 0; n < 3; n++) {
        printf("L'initiale de %s est '%c' et sa valeur numérique est %d\n", 
                tab[n].nom, tab[n].init, tab[n].init);
    }

    return 0;
}

donne :

$ gcc -Wall 36021613.c
$ ./a.out
L'initiale de Albert est 'A' et sa valeur numérique est 65
L'initiale de Bernard est 'B' et sa valeur numérique est 66
L'initiale de Charles est 'C' et sa valeur numérique est 67
$

65 correspond au code ASCII de la lettre 'A' : http://www.asciitable.com/

Dal
Commenter la réponse de [Dal]