ヌル文字で終了するストリングの保管に使用する %STR
%STR(ポインター:長さ) は、式の左側で使用されると、式の右側の値を、 ポインターによって指し示されている記憶域に割り当て、最後にヌル文字 終了記号のバイトを追加します。 %STR の 2 番目のパラメーターとして指定されている長さが N である場合、最後のヌル文字終了記号用に 1 バイトを予約しておく必要があるため、右側で使用可能な最大値は N-1 バイトになります。
指定可能な最大長は 65535 です。これは、最後に ヌル文字終了記号用に 1 バイトを予約しておく必要があるので、最高でも、右側の 65534 バイトが使用可能であるということです
この長さは、ポインターが指し示す記憶域の量を示します。また、この長さは、右側にある最大長より長くなければなりません。 ポインターは、少なくとも長さパラメーターと同じ長さの記憶域を
指し示すように設定する必要があります。 式の右側の長さが指定された長さより長い場合、その右側の値は切り捨てられます。
注: 次の条件がいずれも真となった場合、データ破壊が起こります。
- 長さパラメーターが、ポインターによってアドレスされたデータの実際の 長さより長い。
- 右側の長さが、ポインターによってアドレスされたデータの実際の 長さと同じかそれより長い。
図 1. %STR (左側) の例
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D String1 S *
D Fld1 S 10A
/FREE
%str(String1: 25)= 'abcdef';
// The storage pointed at by String1 now contains 'abcdef¬'
// Bytes 8-25 following the null-terminator are unchanged.
%str (String1: 4) = 'abcdef';
// The storage pointed at by String1 now contains 'abc¬'
/END-FREE