C/400 で外部記述としてデータ・ベースを処理しているときに、可変長フィールドを
使用するためには少しばかりの修正を必要とする。
例えば 商品マスター QTRFIL/SHOHIN を扱うときには
#include <recio.h> : #pragma mapinc("SHOHIN", "QTRFIL/SHOHIN(SHOHINR)", "both", "d",,"" ) #include "SHOHIN" : _RFILE *SHOREC; SHOREC_both_t SHO_REC; : : memcpy(SHOREC.SHNAME, "蛍光灯スタンド", 16); ・・・①
のような記述を行うはずである。
ところが商品マスター SHOHIN の商品名 : SHNAME を次のように可変長フィールドとして
定義していると、この演算はコンパイル・エラーとなってしまう。
A SHNAME 1024O COLHDG(' 商品名 ') A VARLEN(24)
この記述はフィールド SHNAME は最初は 24バイトとして確保されているが
1024 バイトまで拡張可能な可変長フィールドであることを意味している。
SHNAME が固定長フィールドであれば ① の演算は問題ないが SHNAME が可変長フィールドである場合は
コンパイル・エラーとなっしまう。
なぜならば可変長フィールド SHANEM は
struct { short len; char data[1024] } SHNAME;
として定義されているからである。ここで shirt len はデータの長さである。
データ部分はつねに data という名前で定義されている。
従って ① の演算命令は
memcpy(SHOREC.data.SHNAME, "蛍光灯スタンド", 16);
と記述しなければならない。