Scanf et chaine de caracteres avec espaces

Résolu
Bonjour,

j'ai un problème lorsque j'utilise scanf pour lire une chaine de caractères contenant des espaces. avec l'utilisation de fgets ça marche, sauf que Linux renvoit un message me signalant que cette fonction est dangeureuse. j'opte alors pour le scanf.
voici mon code
#include <stdio.h>
#include <stdlib.h>

int main(){
    char *nom;
    nom=(char*)malloc(sizeof(char)*50);
    printf("Entrez votre nom et prenom : ");
    scanf("%s",nom);
    printf(" Votre nom est = %s",nom);
    return 0;
}


l'affichage s'arrête juste aprés l'espace. le prenom ne s'affiche pas.

merci d'avance pour votre aide.



--
HD 500Go
RAM 4Go

2 réponses

  1. Modérateur
    Tu peux utiliser scanf comme ceci

    #include "stdio.h"
    
    int main()
    {
    	char nom[50];
    	
    	printf("Entrez votre nom et prenom : ");
    	scanf("%[^\n]",nom);
    	printf("Votre nom est : %s",nom);
    	
    	return 0;
    }
    7
    1. Tu pourrais aussi lui indiquer comment vider le buffer d'entrée, là s'il fait plusieurs scanf de suite il risque fort d'être surpris !
      0
    2. Modérateur
      C'est vrai il faudrait rajouter un getchar() après le scanf pour retirer le \n final.
      Mais quitte à pointer l'erreur, ta contribution aurait été bien plus intéressante, si tu l'avais toi même résolu plutôt que d'attendre que je le fasse...
      1
  2. merci pour votre solution et ça marche.
    mais pas une solution qui utiliserait les pointeurs du genre char*?
    je voudrai faire de l'allocation dynamique.

    vos solutions seront les bienvenues
    0
    1. Modérateur
      Tu peux reprendre ton code d'allocation dynamique d'avant, ça ne change rien.
      Il n'y a que le scanf qui est différent.
      0