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

解決


xyz  2006-02-17 22:14:59  No: 60748

おせわになります。

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 22:19:54  No: 60749

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

> arBin.Write(Name,10);

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


xyz  2006-02-17 22:37:07  No: 60750

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

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

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

>> arBin.Write(Name,10);

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

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


Blue  2006-02-17 22:40:31  No: 60751

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


xyz  2006-02-17 23:19:06  No: 60752

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

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

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


xyz  2006-02-24 00:19:20  No: 60753

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加