Che cosa significa “Attenzione: il ritorno rende intero da puntatore senza un cast” significa in C?
-
16-09-2019 - |
Domanda
Sto scrivendo una semplice funzione in C il cui scopo è quello di prendere un numero a 6 bit, elaborare i primi 3 bit, e sulla base di questo, restituire una "r", "w" o "o".
Tuttavia, quando compilo ricevo questo avvertimento: 'ritorno rende intero da puntatore senza un cast'. Poi, quando ho eseguito il programma, trovo che la funzione restituisce un personaggio strano che sicuramente non è uno dei tre che sto cercando.
Che cosa sta succedendo qui? Grazie in anticipo.
Ecco la mia funzione:
char
readorwrite(int opcode)
{
if (opcode >> 3 == 4) {
return "r";
} else if (opcode >> 3 == 5) {
return "w";
} else {
return "o";
}
}
Soluzione
Il problema è che "r", "w" e "o" sono costanti stringa, il che significa che il loro tipo effettivo è char [] o char *. Ciò significa che la funzione è in realtà tornando puntatore s in una stringa terminata da zero. Per singoli caratteri, si consiglia di utilizzare 'r', 'w', e 'o' invece.
Altri suggerimenti
Si ritorna un const char *
, vale a dire un puntatore a una locazione di memoria in cui la stringa "o" viene memorizzato quando si dovrebbe essere restituisce un char 'o'