2016-06-24 3 views
0

から「XYZ」のX引数を渡します関数内の引数は次のようになります。警告:</p> <pre><code>char ** argv; </code></pre> <p>そして、関数の定義のようなものです:私たちは渡している場合は今</p> <pre><code>extern int my_system(const char *argv[]); </code></pre> <p>変数は次のように宣言されている場合、互換性のないポインタ型

(my_system(argv)) 

次に、「my_system」の引数1をincからスローします。 ompatibleポインタ型。

この可能性のある解決策にはどのようなものがありますか?

+1

は[、最小完全、かつ検証例]を投稿してください(http://stackoverflow.com/:あなたのケースでは

は、複雑の理解を得て、あなたはサイレント警告へのポインタをキャストすることができhelp/mcve)を試してみてください。 –

答えて

0

Cでは、すべての場合において究極の要素の修正を妨げないので、T**からconst T**の間の暗黙の変換はありません。詳細な説明とバックドアの変更の例については、C FAQの質問11.10を参照してください。

extern int my_system(const char *argv[]); 

int main(int argc, char* argv[]) 
{ 
    my_system((const char**)argv); 
} 
+0

これは、 'const'引数が' const'以外のものに渡される逆の状況でのみ警告を出しますか? 'const'引数に' strcpy'などが渡されることは決して問題ありません。 –

+0

@Weather Vane:問題の警告は 'char ** - > const char **'です。互換性のないポインタのために逆の状況(パラメータ 'char **'を期待する関数に 'const char **'を渡すこと)は許されませんが、別の話です。 –

+1

2つのレベルの間接指定( 'char **')がある場合は、両方向に警告が表示されます。非constにconstを代入すると、単一の間接指定( '' char * ')のみを持つ警告が表示されます。したがって、非constを 'strcpy()'その他に渡す。警告は発生しません。 –

関連する問題

 関連する問題