Saisir un char* pour le retourner

Saisir un char* pour le retourner - C - Programmation

Marsh Posté le 07-01-2005 à 18:51:39    

Comment saisir un caractère puis retourner le pointeur sur celui-ci?
Apparement, on peut pas utiliser direct la fonction scanf("%s", nom) et il faut scanner uns à uns les caractères... ?
J'ai tenté :
 
        char nom[21];
        int i=0;
        printf("Quel nom voulez-vous donner à votre joueur (20 caract. max) ? " );
        while((nom[i]=getchar())!='\n')
 {
  i++;
 }
        nom[i]='\0';
        printf("Votre nom :" );
        i=0;
        while(nom[i]!='\0')
        {
                    putchar(nom[i]);
                    i++;
        }    
 printf("\n" );
 
       return nom;
 
 
Mais ici nom est local et la compilation me renvoie :  
 
cc -Wall -Werror interfaceText.c main.c -o interfaceText
interfaceText.c: In function `demanderEtAfficherNomJoueur':
interfaceText.c:61: warning: function returns address of local variable
make: *** [graphik] Erreur 1
 
Comment renvoyer un pointeur sur ma chaine de caractère saisie?
J'ai essayé de ruser en créant un autre char* et en faisant un strcpy, mais j'ai eu un segmentation fault.
Merci.

Reply

Marsh Posté le 07-01-2005 à 18:51:39   

Reply

Marsh Posté le 07-01-2005 à 19:00:28    

Bonjour Sedrilo,
pour plus de careté, utilise les balises [ cpp] et [ /cpp] (supprime l'espace juste après le crochet ouvrant),
indente correctement ton code et une pluie de réponses résolvera tout tes problèmes... ;)


Message édité par pains-aux-raisins le 07-01-2005 à 19:02:49
Reply

Marsh Posté le 07-01-2005 à 19:03:08    

sedrilo a écrit :

Comment saisir un caractère puis retourner le pointeur sur celui-ci?


Tu veux sans doute dire "comment saisir une chaine de caractère et retourner son adresse ?"
 
Il y a 3 solutions.
 

  • Passer l'adresse d'une chaine (et sa taille)

  char s[123)
 
   f(s, sizeof s);

 
 

  • Allouer un tableau de char et retourner son adresse. La libération est faite par l'appelant.

char *f()
{
   char *s = malloc (123);
   <...>
   return s;
}


 

  • Retourner l'adresse d'un tableau statique (déconseillé pour des problèmes liés à la non-réentrance du code)

char *f()
{
   static s[123];
   <...>
   return s;
}


Citation :


Apparement, on peut pas utiliser direct la fonction scanf("%s", nom) et  


On peut utiliser scanf(), mais c'est une fonction difficile. On préfère fgets().


Message édité par Emmanuel Delahaye le 07-01-2005 à 19:46:25

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-01-2005 à 19:32:56    

Ok merci Emmanuel, je suis passé par le malloc et j'ai pu retourner son adresse!

Reply

Marsh Posté le 10-01-2005 à 17:37:27    

moi je dirais un truc du genre c aussi possible.
scanf("%20s", nom);


---------------
  ____
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed