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

1 réponse

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