0

私はこの構造を持っています:

struct dict{
int len;
char (*dict0)[MAX_WORD_LEN+1];
char (*dict1)[MAX_WORD_LEN+1];

};

そして私はこれを行います:

構造体辞書; struct dict * p_diction =&dictionary; しかし、ポインターへのポインターを使用してscanfを実行しようとすると、エラーが発生します。当然、iは定義されています。

scanf( "%10s"、p_diction->(*(dict0 + i))[0]);

'前に期待される識別子'('トークン

&dictionaryを使用してscanfを実行したくないのは、scanf以外の他のインスタンスでも発生するためです。

コマンドを書くための正しい形式は何ですか?

4

1 に答える 1

0

あなたが欲しいのは

p_diction->dict0[i]

また

*(p_diction->dict0 + i)

変換のためcharにポインタを渡す必要があるので、問題ありません(最初のポインタへのポインタに変換されます)。%schar[MAX_WORD_LEN+1]char

p_diction->dict0

へのポインタを提供し、これらの配列char[MAX_WORD_LEN+1]i-番目が必要なので、このポインタを。だけインクリメントする必要がありますi。次に、正しいタイプのポインターを取得するには、逆参照して配列を取得する必要があります。次に、配列からポインタへの自動変換を使用するかchar、配列の最初のアドレスを明示的に渡すことができます

&p_diction->dict0[i][0]

あなたが試みた2つの逆参照で、あなたはchar大混乱を引き起こすであろう、を通過したでしょう。必要なのは1つだけです。

于 2013-01-11T15:13:16.263 に答える