Aide sur une fonction retournat un pointeur sur char. Merci

Aide sur une fonction retournat un pointeur sur char. Merci - C - Programmation

Marsh Posté le 15-10-2014 à 06:09:51    

Salut a tous j'ai problème avec une fonction en c depuis 2 mois voici la fonction en question  
 
 
char *rechercheCaractereChaine (const char *chaine, int caractereARechercher)
    {
        char *pi = NULL ;
        int i = 0 ;
        for(i = 0; i < longueurChaine(chaine); i++)
        {
            if(chaine[i] == caractereARechercher)
            {
               pi = ( chaine + i ) ;// c 'est sur cette ligne ou il y a probleme
               return (pi) ;
            }
 
        }
        return(pi) ;
    }
comme vous pouvez le voir cette fonction recherche un caractère dans une chaine de caractères et retourne un pointeur sur char mais a la compilation
sa m affiche le massage suivant a la ligne ou il y a le commentaire :
warning:assignment discards 'const' qualifier from pointer target type [enabled by default]
comment faire pour que message ne s affiche plus  
merci d 'avance.

Reply

Marsh Posté le 15-10-2014 à 06:09:51   

Reply

Marsh Posté le 15-10-2014 à 12:40:26    

Il va falloir apprendre l'anglais, si tu veux t'en sortir en programmation.
Le message d'avertissement de ton compilateur est plutôt éloquent : tu perds l'information que le char sur lequel tu pointes était constant quand tu retournes sont adresse. Tu peux corriger ca en retournant un const char* au lieu d'un simple char*


---------------
last.fm
Reply

Marsh Posté le 15-10-2014 à 13:24:10    

Soit il peut caster:  

Code :
  1. char *rechercheCaractereChaine (const char *chaine, int caractereARechercher) {
  2.     char *pi = NULL ;
  3.     int i = 0 ;
  4.     for (i = 0; i < longueurChaine(chaine); i++) {
  5. if(chaine[i] == caractereARechercher) {
  6.     pi = (char *) ( chaine + i ) ;// c 'est sur cette ligne ou il y a probleme
  7.     return (pi) ;
  8. }
  9.     }
  10.     return(pi) ;
  11. }

 
soit il décide que tout est en const:

Code :
  1. const char *rechercheCaractereChaine (const char *chaine, int caractereARechercher) {
  2.     const char *pi = NULL ;
  3.     int i = 0 ;
  4.     for (i = 0; i < longueurChaine(chaine); i++) {
  5. if(chaine[i] == caractereARechercher) {
  6.     pi = ( chaine + i ) ;// c 'est sur cette ligne ou il y a probleme
  7.     return (pi) ;
  8. }
  9.     }
  10.     return(pi) ;
  11. }


Tout dépend de ce qu'il veut faire du résultat (modifier ou pas la chaine retournée...).
Noter que c'est idiot ici que l'on aie comme paramètre int caractereARechercher. Ce serait bien plus clair d'avoir char caractereARechercher.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-10-2014 à 18:27:45    

kalin a écrit :


Code :
  1. char *rechercheCaractereChaine (const char *chaine, int caractereARechercher)
  2. {
  3.     char *pi = NULL ;
  4.     ...
  5.     return(pi) ;
  6. }



 
Salut
 
Tu devrais remplacer ton dernier return par

Code :
  1. return NULL


C'est plus lisible. D'ailleurs en fait ta variable pi ne sert à rien. Ou plutôt elle servira si tu t'en sers comme pointeur de travail, ce qui t'évitera déjà de faire deux fois ce chaine + i (hé oui, chaque fois que tu tapes dans chaine[i] ça provoque ce déréférencement) et surtout cet appel à longueurChaine() à chaque itération !!!
 
Bref ta fonction à tout à y gagner si tu l'écris ainsi

Code :
  1. const char *rechercheCaractereChaine (const char *chaine, int /* char ???*/ caractereARechercher) {
  2.     const char *pi ;
  3.     for (pi = chaine; *pi != '\0'; pi++) {
  4.         if (*pi == caractereARechercher) return pi;
  5.     }
  6.     return NULL;
  7. }


Message édité par Sve@r le 15-10-2014 à 18:37:10

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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