Assigner un char dans une structure.
Utilisateur anonyme
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
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.)
J'ai également tenté :
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 :
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
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
1 réponse
-
Salut Jockill,
En C, unchar
est un type entier.
Une chaîne en C est une suite sechar
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 destrcpy()
un typechar
, au lieu d'un typechar *
.
Vu qu'unchar
est un type entier, pour affecter le contenu d'une variable de typechar
à 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