「警告:returnは、キャストなしでポインターから整数を作成する」とはどうなりますか?

StackOverflow https://stackoverflow.com/questions/788752

質問

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'を返す必要があるときに保存されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top