Language c sur les pointeurs

Mikesega Messages postés 11 Statut Membre -  
loupius Messages postés 789 Statut Membre -
Bonjour,
je voudrais savoir pourquoi mon programme ne pointe pas sur le pointeur

#include <stdio.h>
#include <stdlib.h>
void saisir (char *sant,char *tour){
char nom [20],prenom [20];
printf("donnez votre nom et prenom");
scanf("%s %s",&nom,&prenom);
sant=nom;
tour=prenom;
}
main(){
char *N,*P;
saisir(N,P);
printf("%s %s",N,P);

system("pause");
return 0;
}
Merci de m'aider
Configuration: Windows 7
Safari 532.0

1 réponse

  1. loupius Messages postés 789 Statut Membre 148
     
    char nom [20],prenom [20];
    scanf("%s %s",&nom,&prenom);

    Mais le compilateur ne t'a pas prévenu qu'il y a quelque chose qui ne vas pas ? L'adresse du tableau c'est 'nom' et non '&nom' !
    D'autre part 'sant = nom' n'a aucun sens car 'nom' est une variable locale et que vouloir conserver son contenu est pure illusion, le contenu est perdu à la fin de la fonction.
    Je vais te donner un mauvais exemple mais qui fonctionne:
    #include <stdio.h>
    #include <stdlib.h>
    
    void saisir (char **sant, char **tour)
    {
      *sant = malloc(20);
      *tour = malloc(20);
      printf("Donnez votre nom et prénom: ");
      scanf("%s %s", *sant, *tour);
    }
    
    int main()
    {
      char *n,*p;
      saisir(&n, &p);
      printf("%s %s", n, p);
      free(n);
      free(p);
    
      //system("pause");
      return EXIT_SUCCESS;
    }
    
    
    C'est un mauvais exemple car il ne faut pas utiliser 'scanf' pour saisir des chaînes de caractères; il n'y a en effet aucun contrôle sur la taille de la saisie et s'il y a un débordement c'est la catastrophe. A part cela, l'exemple est correct. Réfléchis au passage de paramètre et à l'allocation mémoire.
    Bonne continuation.
    0