[C] Scanf et chaînes de caractères. [Résolu/Fermé]

Signaler
Messages postés
239
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
1 mars 2014
-
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
-
Bonjour,
J'ai un petit soucis : lorsque j'essaye de faire un scanf avec une chaîne de caractère j'obtiens le message d'erreur suivant : attention : format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[100]’

Voici mon code source :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char prenom[100];
    scanf("%s", &prenom);
    printf("prenom = %s \n", prenom);
    return 0;
}

D'avance merci!

6 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 707
Car scanf est une fonction vraiment complexe et on a tendance à mal l'utiliser.
Par exemple, si tu mets scanf("%s", prenom); avec char prenom[5]; et que tu mets comme prénom : "geraldine", alors tu auras un segmentation fault. C'est d'ailleurs une si grave erreur qu'il est très important de mettre ses logiciels à jour ou d'appliquer les patchs pour être en sécurité ;-))).

Cdlt,
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
239
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
1 mars 2014
5
Pourquoi vaut-il mieux utiliser fgets ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 707
Bonjour,

scanf("%s", prenom); Il faut enlever l'esperluette (&).
Le tableau passé en argument sera de type char*.

De plus attention à l'utilisation de scanf. Il vaut mieux utiliser fgets ou alors mettre : scanf("%99s", prenom) et vérifier la valeur de retour.

Cdlt,
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 707
Car scanf est une fonction vraiment complexe et on a tendance à mal l'utiliser.
Par exemple, si tu mets scanf("%s", prenom); avec char prenom[5]; et que tu mets comme prénom : "geraldine", alors tu auras un segmentation fault. C'est d'ailleurs une si grave erreur qu'il est très important de mettre ses logiciels à jour ou d'appliquer les patchs pour être en sécurité ;-))).

Cdlt,
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
17
c une fonction depreciable comme strcpy ou strcat
elles ont des failles de securite elle ne gere pas l overflow
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 707
Non, scanf n'est pas dépréciable. On peut très bien faire du traitement sécurisé avec scanf à condition de bien l'utiliser, ce qui n'est pas le cas de strcpy ou strcat.
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
17 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

merci fiddy
en faite c qu en 1er anne on nous avez interdit d utiliser scanf so j ai cru que ...........
bye
Messages postés
239
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
1 mars 2014
5
Et bien merci pour vos informations, je vais me renseigner plus emplement sur fgets.