如何解决错误“赋值从没有强制转换的指针中生成整数”?

Posted

技术标签:

【中文标题】如何解决错误“赋值从没有强制转换的指针中生成整数”?【英文标题】:How to solve the error "assignment makes integer from pointer without a cast"? 【发布时间】:2015-03-08 06:59:45 【问题描述】:

这是一段代码:我想知道我的错误在哪里? 我有一个名为country 的结构,它使用链表,这是我的搜索函数:

country *search(char *v)

   country *c; c=head;
   while(c)
   
           if(strcmp(c->name,v)==0)
           return c;
           c=c->next;
           if(c==head) break;
           return (void *)-1;

main 我有(k 是一个int 变量):

printf("  \n\tEnter name of country for searching:   ");
                fflush(stdin); gets(v);
                k = search(v); // Function for searching
                if(k>=0)
                puts("\n\t Info about Country: \n ");

当我在 Dev C++ 中编译它时,我得到:

[Warning] assignment makes integer from pointer without a cast [enabled by default]

我该如何解决这个问题?

【问题讨论】:

不要将search的返回值赋给int类型的变量,而是创建一个country*类型的变量并将search的返回值赋给它。 > 请学会使用更正统的代码布局;你的代码片段几乎不可读并且很难理解,因为布局非常特别——尤其是第一个片段。另外,请注意using fflush(stdin) 和why the gets() function cannot be used safely。 正如@RSahu 所说,您的函数search() 被声明为返回country *,因此将其结果分配给k,即int,必然会出现错误。当非缺失返回类型是指针时,为缺失值返回 0 或 NULL。返回(void *)-1 是一种惯例(尽管并非没有标准化的先例)。 在运行k = search(v) 之后,您期望k 包含什么? 错误消息和它发出的代码行不是说明了一切吗? 【参考方案1】:

需要解决的几个问题:

    search 的返回值,当你没有找到你要搜索的内容时:

    country *search(char *v)
    
       country *c; c=head;
       while(c)
       
          if(strcmp(c->name,v)==0)
          
             return c;
          
          c=c->next;
          if(c==head) break;
       
    
       // Don't use -1 as an invalid search.
       // Use NULL instead.
       // return (void *)-1;
       return NULL;
    
    

    使用正确的变量类型来分配search的返回值。

    // Don't use k, which is of type int.
    // Use a variable of the right type.
    // k = search(v);
    country* cPtr = search(v);
    if( cPtr )
    
       puts("\n\t Info about Country: \n ");
    
    

【讨论】:

以上是关于如何解决错误“赋值从没有强制转换的指针中生成整数”?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决颤振中的 build.gradle 错误。如何解决此错误“评估项目 ':app' 时出现问题。> 格式错误的 \uxxxx 编码。”

c#Ajax 的错误,应该如何解决?

"SQL SERVER,错误:207" 如何解决

如何解决“错误:输入中的语法错误(1)。”

如何解决此分段错误:以下代码的 11 错误?

如何解决子重复错误?