警告:从不兼容的指针类型返回(默认情况下启用)

时间:2013-01-04 17:15:06

标签: c function pointers const

我编写了一个函数。它输入1个字符串和1个字符。字符是起始点,它从此字符打印。但我的代码给出了2个错误。你能救我吗?

#include <stdio.h>

char * mystrchr(const char * from, char c)
{
    int i;
    for(i=0; from[i]!='\0'; i++)
        if(from[i]==c)

    return (const *)from+i;

return 0;
}

int main()
{
    char *a;

    a=mystrchr("asdfg","d" );

    printf("%s", a);

return 0;
}

注意:其中一个警告不适合标题。因此,我在那里写道:

传递'mystrchr'的参数2从指针生成整数而没有强制转换[默认启用]

4 个答案:

答案 0 :(得分:2)

#include <stdio.h>

char * mystrchr(const char * from, char c) {
   int i;
   for(i=0; from[i]!='\0'; i++)
      if(from[i]==c)
         return from+i;
   return 0;
}

int main() {
    char *a;
    a=mystrchr("asdfg",'d' );
    printf("%s", a);
    return 0;
}

答案 1 :(得分:1)

  

传递'mystrchr'的参数2从指针中生成整数而没有强制转换

所以你传递一个指针("d"的类型为char [2],当传递给函数时它会衰减到char *),但函数需要一个char ,这是一个整体类型。

修正:更改

mystrchr("asdfg", "d");

mystrchr("asdfg", 'd');

(注意'd'周围的单引号 - 单引号表示char,而双引号表示字符串文字。)

答案 2 :(得分:0)

您可以使用第二个参数的单引号删除一个警告。 您在单引号中传递"d"次传递'd'。 像这样 : mystrchr("asdfg", 'd');

"d"char*类型,而您接受函数定义中的参数为char仅因此警告。

同时将代码return (const *)from+i;更改为return from+i;,无需在此处进行类型转换。

因为achar*类型,并且您正在返回const char *类型并将const char*分配给char*所以您获得了不兼容的指针类型警告消息

答案 3 :(得分:0)

您的功能就像这样声明

char *mystrchr(const char *from, char c)

,旨在将非const指针返回到const from字符串的中间。您不能将const数据转换为非const。所以你应该声明你的函数:

const char *mystrchr(const char *from, char c)

此时您可以在return声明中删除演员。

return from+i;

如果使用迭代指针,该函数可以说更简单:

const char *mystrchr(const char *from, const char c)
{
    for (const char *p = from; *p; p++)
        if (*p == c)
            return p;
    return 0;
}

另一个问题是文字"d"是以空字符结尾的C字符串文字,而不是char。您需要使用'd'来指定char字面值。

相关问题