return maakt integer van pointer zonder cast [-Wint-conversion] retourkandidaat

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 candidateis 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 getkeyeen 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 candidatearray.

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%

getkeyis gedeclareerd om een charte retourneren, maar u probeert een candidatete retourneren, wat een chararray.

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 candidateconverteert 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?).

Other episodes