0

c が puts() を使用してメッセージの一部を表示する方法を理解できません。私が同等と考える 2 つの方法は、この関数では同じようには機能しません。例えば

 void skippie(char *msg)
 {
    puts(msg + 6);
 }

 char *msg = "Don't call me!";
 skippie(msg);

これは正常にコンパイルされますが、そうではありません

void skippie(char *msg)
{
    puts(msg[6]);
}

char *msg = "Don't call me!";
skippie(msg);

puts() はどのように 2 つを区別し、1 つだけをコンパイルしますか? コンパイラは、「const」文字が必要だと不平を言いますが、その構文を使用しようとしても失敗します。誰でもこれを説明できますか?

4

2 に答える 2

1

インデックス演算子もポインターを逆参照するため、

msg[6]*(msg + 6)ではなくと同等msg + 6です。

const char*さらに、 を期待している間は、関数に を渡すことはできませんchar*。つまり、関数シグネチャも更新する必要があります。

于 2015-02-08T19:34:56.410 に答える
0

msg + 6と同じではありませんmsg[6].

あなたのコードによると、msg+6は でありchar *、 は をmsg[6]表しますchar

のマニュアル ページから引用するとputs()、構文は次のとおりです。

int puts(const char *s);

したがって、 の引数はではなくでputs()ある必要があります。const char *char

于 2015-02-08T19:29:26.613 に答える