8 votes

cast élimine les qualificatifs du type cible du pointeur ?

-Wcast-qual émet cet avertissement sur la méthode stristr() return ligne. Quel est le problème ?

avertissement : le cast élimine les qualificatifs du type cible du pointeur.

char *stristr(const char *string, const char *substring)
{
size_t stringlength = strlen(string);
char *stringlowered = malloc(stringlength + 1);
strcpy(stringlowered, string);
tolower2(stringlowered); // in my source it has a different name, sorry.

char *substringlowered = malloc(strlen(substring) + 1);
strcpy(substringlowered, substring);
tolower2(substringlowered); // in my source it has a different name, sorry.

const char *returnvalue = strstr(stringlowered, substringlowered);
if(returnvalue != NULL)
{
    size_t returnvaluelength = strlen(returnvalue);
    returnvalue = string;
    returnvalue += stringlength - returnvaluelength;
}

free(stringlowered);
free(substringlowered);

return (char *)returnvalue;
}

EDIT :
Dans le code source de strstr() de la glibc 2.15 :

return (char *) haystack_start; // cast to (char *) from const char *

9voto

Oli Charlesworth Points 148744

Vous avez déclaré returnvalue comme un pointeur vers un const char mais vous l'avez ensuite transformé en un pointeur sur non- const char . Vous avez jeté le const le compilateur se plaint donc que vous l'avez ignoré !

La solution consiste soit à modifier le type de retour de la fonction, soit à trouver une fonction autre que la fonction de retour. const char à pointer du doigt. Vous n'en avez pas dans votre fonction, vous pouvez donc envisager de changer le type d'argument si vous voulez. vraiment besoin d'un non const type de retour.

5voto

MByD Points 78505

Vous lancez un const char * (appelons-la chaîne de caractères non modifiable) à un fichier char * (chaîne de caractères modifiable), vous écartez le const qualificatif.

0voto

EBlake Points 461

Essayez de changer la déclaration/affectation

const char *returnvalue = strstr(stringlowered, substringlowered);

à

char *returnvalue = strstr(stringlowered, substringlowered);

puis retirez le moulage dans la ligne de retour (vous n'en avez plus besoin).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X