ストリングの結合や分割を行うときに、STRING または UNSTRING によって使用されるポインターが受信フィールドの範囲を超えることがあります。 オーバーフロー条件が存在する可能性はありますが、COBOL ではオーバーフローの発生を許可しません。
その代わりに、STRING 操作や UNSTRING 操作は完了せず、受信フィールドは未変更のままとなり、制御は次の順次ステートメントに移動します。 STRING または UNSTRING ステートメントの ON OVERFLOW 句をコーディングしないと、操作未完了の通知が出されません。
次のステートメントを考えてください。
String Item-1 space Item-2 delimited by Item-3
into Item-4
with pointer String-ptr
on overflow
Display “A string overflow occurred”
End-String
以下に、ステートメントの実行前と実行後のデータ値を示します。
| データ項目 | PICTURE | 実行前の値 | 実行後の値 |
|---|---|---|---|
| Item-1 | X(5) | AAAAA | AAAAA |
| Item-2 | X(5) | EEEAA | EEEAA |
| Item-3 | X(2) | EA | EA |
| Item-4 | X(8) | bbbbbbbb1 | bbbbbbbb1 |
| String-ptr | 9(2) | 0 | 0 |
| 1. 記号 b はブランク・スペースを表します。 | |||
String-ptr の値は (0) で、受信フィールドには達しないため、オーバーフロー条件が発生し、STRING 操作は完了しません (String-ptr が 9 より大きい場合にも、オーバーフローが起こります)。ON OVERFLOW が指定されていなかった場合は、Item-4 の内容が未変更のままであったことについて通知されません。