【问题标题】:error function return in cc中的错误函数返回
【发布时间】:2014-03-25 10:55:15
【问题描述】:

我需要从函数中接收 char*,但我不明白出了什么问题。

int main(int argc,char** argv)
{

    char *respuesta;
    respuesta = comunicacion(comando);
    printf("respuesta uno %s",respuesta);

    return EXIT_SUCCESS;
}

char *comunicacion(char data[])
{
        unsigned char c ='d';
        char *respuesta;

        append(respuesta,c);

        return respuesta;
}
void append(char* s, char c)
{
        int len = strlen(s);
        s[len] = c;
        s[len+1] = '\0';
}

这是错误: main.c:24:15: 警告:赋值使指针从整数不进行强制转换[默认启用]

【问题讨论】:

  • 同时显示append的来源。

标签: c function char return


【解决方案1】:

您看到“赋值使指针从整数而不进行强制转换”警告的原因是您的 comunicacion 函数缺少原型。发生这种情况时,C 假定您的函数返回一个int,并且它的所有参数也是int。由于您的 comunicacion 函数的这些都不正确,因此您的代码具有未定义的行为。

另一个问题是comando 未定义。最后,当您调用append 时,respuesta 未初始化。在append 函数中以任何方式使用它都是未定义的行为,因此在未初始化的vale 上调用strlen 是非法的。

最后,请注意data 参数在comunicacion 函数中未使用。这需要更改 - 要么使用参数,要么将其从函数的签名中删除。

【讨论】:

  • 我把这个放在主函数之前,char *comunicacion(char data[]);对于原型和编译,非常感谢。
【解决方案2】:
  1. 在respuesta = comunicacion(comando); .... 编译器假设 comunicacion 返回一个 int,因为它没有看到 prototyp[e 或定义。这很可能是产生警告的原因。

  2. 在 main() 中,comando 显然没有被声明。是否已经定义为全局变量?

  3. 在 comunicacion() 中,respuesta 永远不会设置为任何值。调用 append 不会影响 respuesta 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多