5
4

2 に答える 2

4

問題は、の2番目のパラメータが「非定数データへの定数ポインタへのポインタ」であるということexecvpです。「定数データへのポインタへのポインタ」である、を渡そうとしています。char * const *const char **

これを修正する方法は、char **の代わりに使用することですconst char **(「ポインターからX」はconst、どのタイプXに対しても、常に「ポインターからX」に変換できるため(ただし、ポインターの最上位レベルでのみ):

char* p[10];
p[0] = ...;
// etc.

パラメータを挿入する必要がある場合は、変更しない限りconst char *、パラメータをキャストできることに注意してください。関数ファミリーchar *への引数は非として宣言されていますが、それらを変更することはありません(POSIX 2008仕様を参照)。そこでの理論的根拠は、それらが非として宣言される理由を説明しています。exec*constconst

于 2012-10-18T18:25:33.963 に答える
4

を使用できますchar *p[10]

分解すると、char *const *p「非定数文字の定数ポインタへの非定数ポインタ」を意味します。つまり、p書き込み可能、p[0]​​書き込み不可、およびp[0][0]書き込み可能です。

于 2012-10-18T18:25:41.007 に答える