問題タブ [struct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
3917 参照

c++ - 構造体での可変サイズ配列の逆参照

構造体は、データのバイナリ ブロブ (つまり、ファイルまたはネットワーク パケット) を解析するための便利な方法のようです。これは、ブロブに可変サイズの配列があるまでは問題ありません。例えば:

これにより、最後のデータ文字を見つけることができます。

問題は、複数の可変長配列が必要なことです:

これらの構造を手動で割り当てているわけではありません。次のようなファイルがあります。

バイナリファイル(より具体的にはクラスファイル)を解析しようとしています。私はJavaで実装を書きました(これは私のクラスの割り当てでした)、いいえ、私はC++で個人的なバージョンをやっていて、100行のコードを書かなくても済むことを望んでいました. 何か案は?

ありがとう、ステファン

0 投票する
5 に答える
71073 参照

c# - C++ 構造体配列を C# にマーシャリングする

私はC++で次の構造体を持っています:

そして、これらの構造体の 3 つの配列を取得するために p/invoking している関数:

C++ では、次のようにします。

それは問題なく動作しますが、C# では動作しないようです。次のような C# 構造体を作成しました。

そして、それらのうちの 3 つの配列 (およびそのすべてのサブ配列) を初期化し、これに渡すと:

成功して戻りますが、LPRData 配列のデータは変更されていません。

LPRData の 3 つのサイズの生のバイト配列を作成し、それを次のような関数プロトタイプに渡すことさえ試みました。

GetData (バイト [] データ);

しかし、その場合、最初の LPRData 構造から「データ」文字列を取得しますが、同じ LPRData からの「prob」配列を含め、その後は何も取得しません。

これを適切に処理する方法のアイデアはありますか?

0 投票する
2 に答える
19157 参照

c - C の N 分木

C 言語での N-ary ツリーの適切な実装はどれですか?

特に、自己分散ではなく、各ノードにバインドされていない数の子を使用して、各ノードが既に定義されている構造体を保持する n 分木を実装したいと考えています。たとえば、次のようになります。

0 投票する
2 に答える
16497 参照

c - 構造体へのポインタの配列を初期化するにはどうすればよいですか?

構造体へのポインタの配列を初期化することは可能ですか?何かのようなもの:

エンティティを非連続メモリに、それらへのポインタを連続メモリに取得するために、これを実行したいと思います...しかし、ダイナミックメモリは使用できないので、それがなくても可能かどうか疑問に思います。

0 投票する
2 に答える
1504 参照

c# - C# : これはどのように機能しますか : Unit myUnit = 5;

C#でこれを行うことができることに気付きました:

これを行う代わりに:

自分の構造体でこれを達成する方法を知っている人はいますか? リフレクターを使用して Unit 構造体を調べたところ、TypeConverter 属性が使用されていることに気付きましたが、構造体のカスタム TypeConverter を作成した後も、コンパイラーにこの便利な構文を許可させることができませんでした。

0 投票する
3 に答える
6247 参照

c# - C#からWin32 C /C++構造体メンバーにアクセスする

ネイティブdllまたはexeが何らかのフックを使用してC#から実行しているWin32API呼び出しをインターセプトしています。この特定のケースでは、user32.dllのDrawText()に興味があります。Win32APIでは次のように宣言されています。

LPRECT構造体には、次のシグネチャがあります(Win32 APIでも)。

LONGは、32ビットシステムでの32ビット整数のtypedefです(64ビットシステムについてはわかりません。私は32ビットWindowsを使用しているため、現時点では関係ありません)。この構造体のメンバーにアクセスできるようにするために、C#コードで宣言しました...

...そしてこのRECT構造体を使用してP/Invokeの署名を書きました:

構造体はC/C ++のような参照型ではなく、C#の値型であるため、ここではref修飾子が必要です。

ただし、rect.top rect.leftetcを使用すると、ほとんどの場合0が返されます。これが正しくないことはわかっています。しかし、数え切れないほどの時間をグーグルで調べて、さまざまなことを試した後、私はこの単純なものを機能させることができませんでした。

私が試したこと:

  • RECTメンバーにさまざまなプリミティブを使用する(int、long、short、UInt32 ...)。実際、これが型の問題ではないことは明らかです。いずれにせよ、0ではなく文字化けした数字が表示されるはずだからです。
  • ref修飾子を削除します。rect.leftは、その値ではなくrectへのポインターを正しく返すため、これも愚かです(絶望的な時間、絶望的な対策)。
  • unsafeコードブロックを試しました。動作しませんでしたが、実装を間違えた可能性があります(何をしたか覚えていません)。このアプローチは、一般的にCOMとWin32でのトリッキーなポインターの状況のた​​めに予約されていますが、とにかく私の場合はやり過ぎです。
  • [MarshallAs]RECTのメンバーの前に追加してみました。違いはありませんでした。
  • 値をいじってみましたPack。変わりはない。

私は非常に簡単で簡単なものを見逃しているとかなり確信していますが、それが何であるかわかりません...

どんな助けでも大歓迎です。ありがとうございました。

0 投票する
6 に答える
73585 参照

c - 構造内のメンバーを初期化できないのはなぜですか?

構造内のメンバーを初期化できないのはなぜですか?

例:

0 投票する
4 に答える
2336 参照

c++ - C++: 構造体の ctors?

C++:構造体はすべてが「パブリック」なクラスなので、デフォルトの -ctors が作成されて呼び出されますか?

私が尋ねる理由は、もしあれば、構造体が使用されたときに C++ が C に対して持つ可能性のあるオーバーヘッドを理解することです。C++ では、クラスには構造体にはないオーバーヘッドがあるという意見を聞いたことがありますが、これには疑問があります。

0 投票する
15 に答える
599184 参照

c - C で構造体を頻繁に型定義する必要があるのはなぜですか?

以下のような構造で構成される多くのプログラムを見てきました

なぜ頻繁に必要なのですか?具体的な理由や該当する分野はありますか?

0 投票する
6 に答える
55568 参照

c - 構造体へのポインター/参照を関数に渡す

これはばかげた質問のように聞こえるかもしれませんが、私はまだ C を学んでいるので、ご容赦ください。:)

私は K&R (構造体) の第 6 章に取り組んでおり、これまでのところ、この本は大きな成功を収めています。私は構造体をかなり扱うことに決めたので、この章の早い段階で point と rect の例を使って多くの作業を行いました。私が試したかったことの 1 つは、canonrectポインターを介して関数 (第 2 版、p 131) の動作を変更することvoidでした。

私はこれを機能させていますが、皆さんが私を助けてくれることを望んでいた問題に遭遇しました。canonRect一時的な四角形オブジェクトを作成し、その変更を実行してから、渡されたポインターを一時的な四角形に再割り当てして、コードを簡素化したいと考えていました。

しかし、そうすると、rectは変わりません。代わりに、渡された rect のフィールドを手動で再設定していることに気付きますが、これはうまくいきます。

コードは次のとおりです。

だからここに質問があります:

  1. なぜ機能しr = &temp;ないのですか?(これは、ポインターではなく参照を渡すためだと思います。参照は変更可能ではなく、ポインターは変更可能であると考えるのは正しいですか?)
  2. へのポインターを渡そうとすると、不正なインダイレクションのコンパイル時エラーが発生するのはなぜcanonRectですか? (IE、私が持っていcanonRect(*r);た場合main()。)

1. の答えはすでにわかっていると思いますが、2. は私を困惑させます。ポインターを渡すことは合法だと思っていました。

とにかく... Cの初心者を許してください。