从指针目标类型抛出限定符?

前端之家收集整理的这篇文章主要介绍了从指针目标类型抛出限定符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
-Wcast-qual在stristr()的返回行上输出此警告.问题是什么 ?

warning: cast discards qualifiers from pointer target type

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;
}

编辑:
在glibc 2.15的strstr()源代码中:

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

解决方法

您已将returnvalue声明为指向const char的指针,但之后您将其转换为指向非const char的指针.你已经放弃了const限定符,所以编译器抱怨你丢弃了它!

解决方案是更改函数的返回类型,或者找到指向的非const char.您的函数中没有一个,因此如果您确实需要非const返回类型,可以考虑更改参数类型.

猜你在找的C&C++相关文章