38

私はこの警告を受けています:

note: expected ‘const char **’ but argument is of type ‘char **’

今のところ、引数を にキャストして渡していますconst char **。それを取り除くことができる他の方法はありますか?

4

4 に答える 4

39

編集:私も間違った質問に答えました。私の答えはまったく関係ありません!私を無視してください。

編集2:紳士の質問者が彼の質問を明確にした後、私の答えが実際に関連していることがわかりました. C'est la vie.

これは C の楽しい部分であり、十分によく考えれば理解できます。

基本的に、変換:

char** ptr;
const char** const_ptr;
const_ptr = ptr;  // <-- BAD!

許可されていません。

なぜ、あなたは尋ねるかもしれませんか?「私は物事をよりconst にしています!これは明らかに良いことです!」


さて、これについて考えてみてください。それが許可された場合、次のようになります。

const char c = 'A';
char* ptr;
const char** const_ptr = &ptr;  // <-- ILLEGAL, but what if this were legal?
*const_ptr = &c;
*ptr = 'B';  // <- you just assigned to "const char c" above.

BAM、あなたは死んでいます。だから...いいえ:-)

于 2013-01-28T13:21:50.313 に答える
1

警告は、呼び出している関数が指定されたパラメーターを期待しているが、パラメーターconst char**を渡していることを示していchar**ます。この警告を取り除くには、次のことができます

  • 本当にパスconst char**
  • パラメータをにキャストしますconst char**(現在行っているように)
  • 関数プロトタイプを変更して、関数がchar**
于 2013-01-28T13:16:38.013 に答える