char型のバイナリファイル出力について

解決


xyz  2006-02-17 13:14:59  No: 60748  IP: [192.*.*.*]

おせわになります。

char* Name;
Name= new char[10];

//アーカイブ構築
CArchive arBin(&m_File , CArchive::store);

//名称書き込み
arBin.Write(Name, 10);

上記のコードで、

char*型の変数Nameに、5文字のデータを代入後、
書き込み処理を行うと、
6文字目以降に、16進で「CD」という文字列が
勝手に挿入されてしまいます。

回避方法がわからなくて困っているので
どなたか助けてください。
よろしくお願いいたします。

編集 削除
kure  2006-02-17 13:19:54  No: 60749  IP: [192.*.*.*]

Nameの[5]以降が未初期化なのに一票。
あとNameの有効な部分だけ書き込みたいのであれば

> arBin.Write(Name,10);

じゃなくて
arBin.Write(Name, strlen(Name));
にしないと。

編集 削除
xyz  2006-02-17 13:37:07  No: 60750  IP: [192.*.*.*]

早速回答ありがとうございます。

>Nameの[5]以降が未初期化なのに一票。
初期化の方法がわかりません。
何か関数とか使うのでしょうか?

>あとNameの有効な部分だけ書き込みたいのであれば

>> arBin.Write(Name,10);

>じゃなくて
>arBin.Write(Name, strlen(Name));
>にしないと。

説明不足でした。
バイナリファイルにデータを固定長で保持したいため、
6文字目以降、NULL文字としたいです。

編集 削除
Blue  2006-02-17 13:40:31  No: 60751  IP: [192.*.*.*]

> 初期化の方法がわかりません。
memset関数  か for文でサイズ分まわして '\0' を代入

編集 削除
xyz  2006-02-17 14:19:06  No: 60752  IP: [192.*.*.*]

回答ありがとうございます。

memset(Name , '\0' , 10);
で無事初期化できました。

作成したバイナリファイルを
EXCELで読み込ませているのですが、
VBAで、
  Name = Left(Name , InStr(Name , Chr(0)) - 1)
とすることで、必要な文字列のみ抽出することができました。

編集 削除
xyz  2006-02-23 15:19:20  No: 60753  IP: [192.*.*.*]

解決つけわすれました!!

編集 削除