-Wcast-qual在stristr()的return行上输出此警告.问题是什么 ?
警告:从指针目标类型转换丢弃限定符
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
在glibc 2.15的strstr()源代码中:
return (char *) haystack_start; // cast to (char *) from const char *
Run Code Online (Sandbox Code Playgroud)
您已声明returnvalue为指向a的指针const char,但之后您将其转换为指向非指针const char.你已经放弃了const限定符,所以编译器抱怨你丢弃了它!
解决方案是更改函数的返回类型,或者找到非const char指向的函数.您的函数中没有一个,因此如果确实需要非const返回类型,可以考虑更改参数类型.