Assigner un char dans une structure.

Fermé
Jockill Messages postés 102 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 13 mai 2019 - 13 mai 2019 à 13:00
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 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
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 13 mai 2019 à 17:06
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
0