VC++を最近始めた者です。
かなり初心者発言で申し訳ないんですが、
構造体って初期化(NULL)出来るのでしょうか?
struct kouzoutai{
char a[2];
char b[3];
char c[5];
}
上記のa〜cを空(ゴミを削除)にしたいんですが
どうすれば良いのでしょうか?
どなたか是非教えてください。
宜しくお願い致します。
構造体にもコンストラクタがかけます。(C++の場合)
struct kouzoutai{
char a[2];
char b[3];
char c[5];
kouzoutai(){
// ここで std::memset なりして初期化できる
}
};
Banさん有難うございます。
「ここで std::memset なりして初期化できる」
とはどういうことなんですか?
めちゃくちゃ初心者で申し訳ありません。
a, b, c が"文字列"用途なら、
a[0] = '\0'; // 以下略
で十分かも知れません。
"文字の配列"なら、
std::memset(a, 0x00, sizeof a); // 以下略
とか
for(register int n=0; n < sizeof a; ++n) a[n] = '\0';
とかすればよいと思います。
# VC のバージョンが不明ですが、古い VC は std:: を外さないとエラーになります。
std:: を外して出来ました。
Banさん丁寧な説明有難うございました。
よう。解決したみてーだけど,ちょっといいか。
「初期化時に」ゼロでクリアしたいんだよな。
これは言語仕様で保証されてねかったか?
struct kouzoutai{
char a[2];
char b[3];
char c[5];
};
int main () {
kouzoutai not_cleared;
kouzoutai cleared = {0}; // これだ
FILE *fp = fopen( "out.dat", "wb" );
if (fp) {
fwrite( ¬_cleared, sizeof(not_cleared), 1, fp );
fwrite( &cleared, sizeof(cleared), 1, fp );
fclose( fp );
// できたファイルをバイナリエディタで見てみろw
}
}
これを応用して
struct kouzoutai {
/* ... */
} kouzoutai_0 = {0}; // kouzoutai のゼロオブジェクト
int main () {
kouzoutai kz;
/* kz をいろいろいじった後に */
kz = kouzoutai_0; // ゼロクリアできる
}
俺はこれをよく使うんだけどよ(´Д`)y-~~
まー,俺みてーなクソはよ,バグがあっても露見しなきゃいいとか
考えている野郎だから,ちょっとヤベーかもしれねーがw
> ={0};
これ、常用しています。結構知らない人多いらしいけど。
> kz = kouzoutai_0; // ゼロクリアできる
構造体が代入できるようになってよかったと思う今日この頃。
ツイート | ![]() |