>>933
charの配列を文字列として使うためには文字列の最後にナル文字を置かないといけない。
つまり、memset(obj.hoge_a, 'y', sizeof(obj.hoge_a) - 1);ではその最後のナル文字が書き込まれないので要注意。

さて、>931の問題はもう一つあって、obj全体を一つのchar配列であるかのように扱ってしまっている。
つまり、obj.hoge_a[0]〜obj.hoge_a[7]まで全て'y'で埋め尽くしているわけだ。
偶偶その構造体ではhoge_a, hoge_b, hoge_cが連続していたので、fprintf()のときに
sizeof(hoge_a) + sizeof(hoge_b) + sizeof(hoge_c) - 1の23文字が出力されたと言うわけ。
その辺りのことに慣れない内はmemset()を使うのは避けた方がいいかもしれない。