おせわになります。
char* Name;
Name= new char[10];
//アーカイブ構築
CArchive arBin(&m_File , CArchive::store);
//名称書き込み
arBin.Write(Name, 10);
上記のコードで、
char*型の変数Nameに、5文字のデータを代入後、
書き込み処理を行うと、
6文字目以降に、16進で「CD」という文字列が
勝手に挿入されてしまいます。
回避方法がわからなくて困っているので
どなたか助けてください。
よろしくお願いいたします。
Nameの[5]以降が未初期化なのに一票。
あとNameの有効な部分だけ書き込みたいのであれば
> arBin.Write(Name,10);
じゃなくて
arBin.Write(Name, strlen(Name));
にしないと。
早速回答ありがとうございます。
>Nameの[5]以降が未初期化なのに一票。
初期化の方法がわかりません。
何か関数とか使うのでしょうか?
>あとNameの有効な部分だけ書き込みたいのであれば
>> arBin.Write(Name,10);
>じゃなくて
>arBin.Write(Name, strlen(Name));
>にしないと。
説明不足でした。
バイナリファイルにデータを固定長で保持したいため、
6文字目以降、NULL文字としたいです。
> 初期化の方法がわかりません。
memset関数 か for文でサイズ分まわして '\0' を代入
回答ありがとうございます。
memset(Name , '\0' , 10);
で無事初期化できました。
作成したバイナリファイルを
EXCELで読み込ませているのですが、
VBAで、
Name = Left(Name , InStr(Name , Chr(0)) - 1)
とすることで、必要な文字列のみ抽出することができました。
解決つけわすれました!!
ツイート | ![]() |