ページの先頭です。
ここから本文です。

よくあるご質問(サポートFAQ)

【SystemDirector Enterprise for Batch】生成コードにおける、入力変数と出力変数の転記について

質問内容

SDEforBatchのPro*C/C++の生成コードにて、ファイル出力用の転記について、メモリ破壊を招くコードが生成されているように見えます。

FILE出力処理を記載したiotに対してソース生成を行うと、以下のようなコードが生成されます。

----------------------------------------
memcpy(stFouTEST_ECPG_D2F_OUT_F->F_JOB_ID, gBfJobid, sizeof(stFouTEST_ECPG_D2F_OUT_F->F_JOB_ID));
memcpy(stFouTEST_ECPG_D2F_OUT_F->F_JSTEP_ID, gBfJobstepid, sizeof(stFouTEST_ECPG_D2F_OUT_F->F_JSTEP_ID));
stFouTEST_ECPG_D2F_OUT_F->F_DATA1 = pTinAlCur000->F02_DATA1;
memcpy(stFouTEST_ECPG_D2F_OUT_F->F_DATA2, pTinAlCur000->F02_DATA2, sizeof(stFouTEST_ECPG_D2F_OUT_F->F_DATA2));
memcpy(stFouTEST_ECPG_D2F_OUT_F->F_DATA3, pTinAlCur000->F06_DATA3_C, sizeof(stFouTEST_ECPG_D2F_OUT_F->F_DATA3));
----------------------------------------


memcpyで入力用の変数に対して、入力用の変数と同じサイズ分コピーしているのですが、メモリ破壊の可能性があるかと思います。
「サイズ -1」をコピーしないといけないのではないでしょうか?

memcpy(stFouTEST_ECPG_D2F_OUT_F->F_JOB_ID, gBfJobid, sizeof(stFouTEST_ECPG_D2F_OUT_F->F_JOB_ID));

memcpy(stFouTEST_ECPG_D2F_OUT_F->F_JOB_ID, gBfJobid, sizeof(stFouTEST_ECPG_D2F_OUT_F->F_JOB_ID)-1);

回答内容

入力項目、出力項目、いずれも、C言語で扱う場合は、文字列(=NULL終端で情報の終わりを識別する)ではなく、バイナリ(=各項目のサイズによって識別する)として扱っているので、問題は発生しません。

【確認済みのバージョン】全バージョン
【確認済みの対象OS】全OS

製品名カテゴリ

SystemDirector Enterprise for Java(バッチ)/C Batch

  • コンテンツID: 3150106015
  • 公開日: 2013年10月11日
  • 最終更新日:2013年10月11日

アンケート

サポート情報充実のためアンケートにご協力をお願いいたします。



コメント欄:
ここからページ共通メニューです。 ページ共通メニューを読み飛ばす。