C/400

41. memmove による文字列の挿入

僭越ではあるが他社類似製品と弊社EnterpriseServer のアーキテクチャーの基礎記述として
全く異なっているのは HTML テンプレートに自由に文字列を挿入することができる技術である。
RPG においても、それは可能ではあるが RPG はストリーム・バッファーを扱うにしては適して
いないし、挿入となると骨の折れる作業となる。
ここに製品の開発言語を ANSI-C で行う利点が製品の差となって現れてくる。
それはともかく最近、頻繁に利用している文字列への挿入技術をひとつ紹介しよう。

memmove を使えば、簡単に文字列を移動させることができる。
そこで挿入すべき場所を memmove によって開けて、後は単なる memcpy で文字列を挿入
すればよいだけである。

trlen = strlen(&tmpbuf[pos]);                                   
dsplen = strlen(m_value);                                       
memmove(&tmpbuf[pos+dsplen], &tmpbuf[pos], trlen);/* 間を空ける */
memcpy(&tmpbuf[pos], m_value, dsplen); /* テキストを挿入する */
【 解説 】

int pos が挿入位置であり、挿入したい文字列が m_value である。
バッファー tmpbuf の pos 移行を memmove によって後ろへずらしておいてから
m_value を tmpbuf の pos の位置に memcpy で挿入している。