Strcat
strcatは、先程示した実装例を見ても分かる通り、s1の容量については一切関知しない。よって、s1の指す配列の範囲を越えて、s2が書き込まれてしまうバッファオーバーランの恐れがある。バッファオーバーランによってメモリが破壊されたり、プログラムが異常動作したり、クラッシュしたりする危険性がある。簡単な対策として、事前に領域長計算を実行する例を示す。
strlenで文字列の長さを事前に取得しているので、もはやstrcatを使用する必要はなく、memcpyで十分となる。
上の例では、事前にchar型配列s1全体のバッファサイズすなわち要素数と、使用済み領域の長さおよび書き込みに必要な領域の長さを比較することによって、配列の空きの容量を超えた書き込み(バッファオーバーラン)を防ぐことができる。なお、さらに異常系や汎用目的を考慮するならば、s1の内容が未初期化で終端NUL文字が含まれていない場合や、s1len + s2len + 1が算術オーバーフローを起こしてしまう場合への対処も必要となってくる。
字数制限付き文字列連結関数としてstrncatも存在するが、書き込み先のバッファサイズを指定できるわけではないので、やはりstrcat同様の危険性を持つことに変わりはない。
代替として、標準ライブラリの一部ではないがstrlcatやstrcat_sを使用することのできる処理系もある。 そのほか、単純な文字列連結用途としてはややオーバースペックではあるが、snprintfを使用する方法もある。