Ik ben C aan het leren, maar ik vind die vage compiler-foutmeldingen steeds frustrerender. Hier is mijn code:
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;
}
Dit genereert één waarschuwing:
- return maakt integer van pointer zonder cast
- retourkandidaat;
Kan iemand deze waarschuwing uitleggen?
Antwoord 1, autoriteit 100%
Je lokale variabele candidate
is een array van char. Als je zegt
return candidate;
je retourneert een aanwijzer naar char. (Dit komt door de zeer nauwe relatie tussen arrays en pointers in C, waarover je meer zult moeten leren als je het nog niet weet.) Maar je hebt aangegeven dat je functie getkey
een char, geen pointer-to-char.
U moet ervoor zorgen dat de retourwaarde van de functie overeenkomt met het type. Misschien wilt u de return
-instructie wijzigen, zodat deze een enkel teken retourneert. Als je wilt dat de functie een hele string retourneert, kun je de declaratie wijzigen in char *getkey()
, maar in dat geval moet je ook zorgen voor de toewijzing van de candidate
array.
Dit is wat de waarschuwing betekent. U heeft geprobeerd een aanwijzer te retourneren. De functie wordt verondersteld een teken terug te geven, dat wordt weergegeven als een klein geheel getal. De compiler is bereid om te proberen de aanwijzer naar een geheel getal te converteren, voor het geval dat je echt wilt, maar aangezien dat meestal geen goed idee is, waarschuwt het je. In dit geval vertelt de waarschuwing je inderdaad dat je waarschijnlijk een fout hebt gemaakt.
Antwoord 2, autoriteit 33%
getkey
is gedeclareerd om een char
te retourneren, maar u probeert een candidate
te retourneren, wat een char
array.
Je wilde waarschijnlijk een van de elementen in de array retourneren, bijvoorbeeld iets als candidate[x]
.
De reden voor de foutmelding “pointer” in plaats van “array” is dat de compiler candidate
converteert naar een pointer naar het eerste element in de array, wat in sommige contexten impliciet gebeurt, bijvoorbeeld bij het retourneren, omdat arrays niet kunnen worden geretourneerd (of als parameters worden doorgegeven) op waarde in C (zie Wat is array-deadt?).