C では、レガシー コードで「長さ 0 の配列」状況が発生することがあります。これには、長さ 0 の配列を含む構造体が含まれます。警告はプラグマによって抑制されますが、そのような配列を含む新しい構造を作成すると、エラー 2233 が発生する可能性があります。なぜこれが発生するのでしょうか?また、解決するにはどうすればよいですか?
長さゼロの配列を使用する理由は、歴史的なものです。配列の動的割り当てを可能にする C ハック。開発者は、長さ 1 の配列またはポインターを使用する代わりに、長さ 0 の配列を含む構造体を作成します。これにより、struct の nData メンバーを使用して配列のサイズを動的に計算できるようになります。
この問題を修正するには、C-Hack を使用できます。関数 mallocSomeData を作成して、指定した長さの配列を動的に割り当てることができます:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
この関数を使用すると、必要な長さの配列を含む someData のオブジェクトを作成でき、「長さ 0 の配列」問題に効果的に対処できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3