2

次のコードを使用して、誰かが私が正しいか間違っているかを教えてくれることを望んでいました。

function から返されたデータを出力しようとしていますがmpg123_decoders()、これは値char**(または「CPU でサポートされているデコーダーの NULL 終了配列」) です。

const char ** pdecoders;
pdecoders = mpg123_decoders();
do {
    con_msg(MSG_BAD, "%s\n", *pdecoders);
    pdecoders += 1;
} while(*pdecoders != NULL);

他にも利用可能なデコーダーがあると確信しているため、次のコードが正しく機能するかどうかはわかりません。

4

1 に答える 1

3

あなたのコードサンプルは私には悪く見えません。データがまったくない場合に備えて、変更します

do {
    con_msg(MSG_BAD, "%s\n", *pdecoders);
    pdecoders += 1;
} while(*pdecoders != NULL);

while(*pdecoders != NULL){
    con_msg(MSG_BAD, "%s\n", *pdecoders);
    pdecoders += 1;
}

しかし、残りはかなりよく見えます。

最初は const キーワードの C での扱い方から少しややこしく聞こえるかもしれませんが、実際には const が指すデータであり、それはまったく変更されていないため、問題はありません。

宣言をそのまま読んでみてください。問題がないことがわかります。

const char **pdecoders 

「pdecoders は const char へのポインタへのポインタ」と読みます。

問題のあるケースは代わりに次のようになります

char** const pdecoders

これは「charへのポインターへのconstポインター」であることが判明するため

于 2013-03-01T18:54:54.070 に答える