スレを勃てるまでもないC/C++の質問はここで 25
[隔離病棟]
©2ch.net (467レス)
スレを勃てるまでもないC/C++の質問はここで 25
[隔離病棟]
©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1471100645/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
328: デフォルトの名無しさん [sage] 2018/02/16(金) 01:33:43.00 ID:Ja2iVc8/ 構造体の、一部のみゼロ埋めする方法を知りたいです CコンパイラはMingw-win32のgcc 6.3.0を使ってます struct aaa_tag{ uint32_t a; uint32_t b; uint32_t c; : uint32_t z; } という構造体に、fread(&aaa, sizeof(aaa), 1, fp)でファイルから値を読み込んでいるのですが 実は構造体としてファイルから読み込むべきサイズが条件により変える必要があります 例えば以下のようにです ・bが1の場合は有効なのはaとbのみ。c以降の値はゼロで書き戻す ・bが5の場合は有効なのはa〜wまで。x以降の値はゼロに書き戻す まずbを読んで、それから必要なサイズを読み出す…も考えたのですがそうではなく、 構造体の途中以降をゼロクリアしようと思っているのですが、これがうまくいきません if (b == 1)memset(&aaa + sizeof(uint32_t) * 2, 0x00, sizeof(aaa) - sizeof(uint32_t)); 等と試行錯誤しているのですが、SIGSEGVが出てしまいます 解決法を教えていただけますか http://mevius.5ch.net/test/read.cgi/tech/1471100645/328
334: デフォルトの名無しさん [sage] 2018/02/16(金) 20:28:30.02 ID:Ja2iVc8/ 328です 皆様情報ありがとうございました 構造体先頭から末尾までのmemsetとは事情が違うということが分かりました offsetof()やダミーの構造体など、方針を見直します ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1471100645/334
340: デフォルトの名無しさん [sage] 2018/02/16(金) 23:47:57.54 ID:Ja2iVc8/ >>335 アライメントについては、OS、アプリ共に32ビットであり、 メンバも32ビットに揃える(パディングはさせない)ように 考慮されてはいるので、無効にしてみましたが変化はなさそうです __attribute__ ((packed))付与有無でsizeof(aaa)としてみましたが、 どちらも4バイト×メンバ数となり、やぱりパディングは されていないのかなと >>336 構造体は、パディングに関わらず先頭以外の場所へmemsetやmemcpyで 触ってはならないのだろう、という思いに至り、方針を見直そうと思ったのですが 実際、書くとしたらどう書くことになるのでしょう 例えば、a〜zまで並べられているメンバ中、cからyまでゼロで埋める…みたいなので… http://mevius.5ch.net/test/read.cgi/tech/1471100645/340
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.027s