c - return 从指针生成整数而不进行强制转换 [-Wint-conversion] return candidate

标签 c

我正在学习 C,但我发现那些模糊的编译器错误消息越来越令人沮丧。这是我的代码:

char getkey (int minimo, int maximo, int alphalen, int index, char alpha[])  
{  
    int cociente, residuo, cont;
    int i = 0;
    char cand[maximo+1];
    char candidate[maximo+1];

    while (index != 0)
    {
        cociente = index / alphalen;
        residuo = index%alphalen;
        cand[i] = residuo;
        index = cociente;
        i+=1;
    }

    for (cont=i-1; cont>=0; cont--)  
    {   
        int pos = cand [cont];
        candidate[i] = alpha[pos];      
    }
    return candidate;
}

这会产生一个警告:

  • return 从指针生成整数而不进行强制转换
    • 回选候选人;

有人可以解释这些警告吗?

最佳答案

您的局部变量 candidate 是一个 char 数组。当你说

return candidate;

你返回一个指向 char 的指针。 (这是由于 C 中数组和指针之间的关系非常密切,如果您还不知道,则必须了解这一点。)但是您已经声明您的函数 getkey 返回一个char,不是指向 char 的指针。

您需要使函数的返回值与其类型匹配。您可能希望更改 return 语句,使其返回单个字符。如果您想让函数返回整个字符串,您可以将其声明更改为 char *getkey(),但在这种情况下,您还必须注意 的分配>候选数组。

警告的含义如下。您试图返回一个指针。该函数应该返回一个字符,该字符表示为一个小整数。编译愿意尝试将指针转换为整数,以防万一这是您真正想要做的,但由于这通常不是一个好主意,它会警告您。事实上,在这种情况下,警告会告诉您您可能犯了错误。

关于c - return 从指针生成整数而不进行强制转换 [-Wint-conversion] return candidate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037165/

相关文章:

c - 应用程序因段错误而崩溃

c - 为什么代码会进入无限循环

c++ - 缓存未命中压力测试 : stunning results. 。有什么解释吗?

c - 用指针 C 填充结构

带方法的 C++ 结构,不带方法的 C 声明

c - 使用 Bison 解析错误

c - Linux程序段错误

c - LibBSON 导出到缓冲区

java - 为工作使用正确的工具 : embedded programming

c - C 中的数据类型和数据类型修饰符