Was bedeutet "Warnung: Rückkehr macht Ganzzahl aus Zeiger ohne Besetzung" in C?
-
16-09-2019 - |
Frage
Ich schreibe eine einfache Funktion in C, deren Zweck es ist, eine 6 -Bit -Nummer zu nehmen, die ersten 3 Teile zu erarbeiten und darauf zu "R", "W" oder "O" zurückzugeben.
Wenn ich jedoch zusammenstelle, bekomme ich diese Warnung: "Rückkehr macht Ganzzahl aus Zeiger ohne Besetzung." Wenn ich das Programm dann ausführe, stelle ich fest, dass die Funktion einen seltsamen Charakter zurückgibt, der definitiv nicht zu den drei ist, nach denen ich nachging.
Was geht hier vor sich? Danke im Voraus.
Hier ist meine Funktion:
char
readorwrite(int opcode)
{
if (opcode >> 3 == 4) {
return "r";
} else if (opcode >> 3 == 5) {
return "w";
} else {
return "o";
}
}
Lösung
Das Problem ist, dass "R", "W" und "O" String -Konstanten sind, was bedeutet, dass ihr tatsächlicher Typ char [] oder char*ist. Das bedeutet, dass Ihre Funktion tatsächlich S-Zeiger zu einer nullterminierten Zeichenfolge zurückgibt. Für einzelne Zeichen sollten Sie stattdessen 'R', 'W' und 'O' verwenden.
Andere Tipps
Sie geben eine zurück const char *
, dh ein Zeiger auf einen Ort im Speicher, an dem die Zeichenfolge "O" gespeichert ist, wenn Sie ein Zeichen „o“ zurückgeben sollten