如何解决错误“赋值从没有强制转换的指针中生成整数”?
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 编码。”