「警告:returnは、キャストなしでポインターから整数を作成する」とはどうなりますか?
-
16-09-2019 - |
質問
Cで単純な関数を書いています。その目的では、6ビット数を取得し、最初の3ビットを作成し、それに基づいて「R」、「W」、または「O」を返します。
ただし、コンパイルすると、この警告が表示されます。その後、プログラムを実行すると、この関数は間違いなく3つのうちの1つではない奇妙なキャラクターを返していることがわかります。
ここで何が起こっているのですか?前もって感謝します。
これが私の機能です:
char
readorwrite(int opcode)
{
if (opcode >> 3 == 4) {
return "r";
} else if (opcode >> 3 == 5) {
return "w";
} else {
return "o";
}
}
解決
問題は、「r」、「w」、および「o」が文字列定数であることです。つまり、実際のタイプはchar []またはchar*です。つまり、関数は実際にSポインターをゼロ終了した文字列に戻していることを意味します。単一文字の場合、代わりに「R」、「W」、および「O」を使用する必要があります。
他のヒント
あなたはaを返します const char *
, 、つまり、文字列「o」が保存されているメモリ内の場所へのポインタは、char 'o'を返す必要があるときに保存されます。
所属していません StackOverflow