我正在学习C,但我发现那些模糊的编译器错误消息越来越令人沮丧。这是我的代码:
Exposures_1x1.txt
这会产生一个警告:
有人可以解释这些警告吗?
答案 0 :(得分:4)
您的本地变量candidate
是一个char数组。当你说
return candidate;
你返回一个指向char的指针。 (这是由于C中数组和指针之间非常密切的关系,如果你还不知道,你必须了解这些关系。)但是你已经声明你的函数getkey
会返回一个char,而不是一个指向char的指针。
您需要使函数的返回值与其类型匹配。您可能需要更改return
语句,以便返回单个char。如果您希望函数返回一个完整的字符串,您可以将其声明更改为char *getkey()
,但在这种情况下,您还必须处理candidate
数组的分配。
这里的警告意味着什么。你试图返回一个指针。该函数应该返回一个字符,表示为一个小整数。编译器愿意尝试将指针转换为整数,以防你真正想做的事情,但由于这通常不是一个好主意,它会警告你。实际上,在这种情况下,警告会告诉您可能犯了错误。
答案 1 :(得分:2)
getkey
已声明返回char
,但您正在尝试返回candidate
char
数组。
您可能想要返回数组中的一个元素,例如candidate[x]
。
错误消息说“指针”而不是“数组”的原因是编译器正在将candidate
转换为指向数组中第一个元素的指针,这在某些上下文中隐式发生,例如返回,因为数组不能按C中的值返回(或作为参数传递)(参见What is array decaying?)。