为什么函数导致此编译器警告:不兼容指向整数转换的指针从函数返回'char [20]'...

时间:2011-10-05 11:11:19

标签: c

该功能有什么问题?

char printThis()
{
    char str[20] = "This is a string";
    return str;
}

我收到警告:不兼容的指向整数转换的指针从结果类型为char的函数返回'char [20]'

5 个答案:

答案 0 :(得分:6)

我可以看到三个问题:

  1. 您正在返回char*,但声明该函数返回char。后者只是一个字符而不是字符串。
  2. 您正在尝试返回仅在函数的堆栈帧上有效的内存。这是一个错误。
  3. 声明您的函数,以便它可以接收任意数量的参数。最好使用void明确声明不接收任何内容。
  4. 像这样修复:

    char* printThis(void)
    {
        char* str = strdup("This is a string");
        return str;
    }
    

    这里我使用strdup在堆上分配字符串。如果你真的想要一个长度为20个字符的缓冲区,那么你需要使用malloc()后跟strcpy()。无论哪种方式,释放返回字符串的责任都会传递给调用者。

答案 1 :(得分:2)

您宣布您的函数返回char,但您想要返回char[]来解释您的警告。

更改您的函数声明以返回char*

此外,您将返回一个指针本地分配的变量(str),因此指针将指向一个不存在的变量。

您必须使用malloc手动分配字符串,或者使用strdup更好地分配字符串,然后将其返回。

不要忘记free分配的指针!

Strdup:http://pubs.opengroup.org/onlinepubs/007904875/functions/strdup.html

答案 2 :(得分:2)

认为返回类型应为char*而不是char 像这样:

char* printThis()
{
    static char str[20] = "This is a string";
    return (char*)str;
}

答案 3 :(得分:0)

因为char实际上是整数类型而char []实际上是指针(char *)。 将您的声明更改为char *

答案 4 :(得分:0)

  • 该函数的类型为char,您尝试返回char *
  • 类型的值
  • str是本地分配的char数组。您无法返回它,因为它在函数结束时不再存在。