3

私は、6 ビットの数値を取得し、最初の 3 ビットを計算し、それに基づいて "r"、"w"、または "o" を返すことを目的とする単純な関数を C で作成しています。

ただし、コンパイルすると、「リターンはキャストなしでポインターから整数になります」という警告が表示されます。次に、プログラムを実行すると、関数が奇妙な文字を返していることがわかりました。

ここで何が起こっているのですか?前もって感謝します。

これが私の機能です:

char
readorwrite(int opcode)
{
    if (opcode >> 3 == 4) {
        return "r";
    } else if (opcode >> 3 == 5) {
        return "w";
    } else {
        return "o";
    }
}
4

2 に答える 2

18

問題は、"r"、"w"、および "o" が文字列定数であることです。これは、実際の型が char[] または char* であることを意味します。これは、関数が実際にゼロで終わる文字列へのポインタを返していることを意味します。1 文字の場合は、代わりに「r」、「w」、および「o」を使用する必要があります。

于 2009-04-25T11:41:55.670 に答える
4

const char *文字「o」を返す必要があるときに、文字列「o」が格納されているメモリ内の場所へのポインタ、つまりポインタを返します。

于 2009-04-25T11:42:23.157 に答える