# STD_CompareLString

## 構文

      #include <nitro/std.h>

      int STD_CompareLString( const char* str1, const char* str2, int len );

      int STD_StrLCmp( const char* str1, const char* str2, int len );

## 引数

str1 | 比較する文字列のポインタを指定します。
str2 | 比較する文字列のポインタを指定します。
len | 比較する文字列の長さを指定します。

## 返り値

比較した文字列が同一ならば 0 を返します。

## 説明

文字列 str1 と、文字列 str2 を len の長さだけ比較します。`strlcmp()` と同じ動作をします。

`STD_CompareNString()`との違いはlenの長さを比較して一致してもその次のstr1文字列がNULLでなかった 場合は一致したことにはならないというところにあります。

バッファオーバーフローを防止するためのプログラム手法として、バッファの違いを検出する時は 長さ制限チェックのない比較関数は長さ制限チェックのある比較関数に置き換えることでバッファ長よりも後ろの アドレスの比較を防止するというものがあります。

その実例の一つとしてstrcmp()をstrncmp()に置き換えるというものがありますが、 strncmp()で長さ指定するパラメータlenに安易にバッファサイズを指定するとバッファがオーバーフローしていても 比較結果が一致していれば一致という結果が返ります。 そこで、strlcmp()では(len+1)文字内にNULL文字がない場合は一致という結果を返さないことで バッファオーバーフローも検出できるようにしています。

そのため、バッファチェックのために比較文字列を使う場合はSTD_CompareLString()を用いることが望ましいです。

`STD_StrLCmp()` は `STD_CompareLString()` の別名として define されています。

## 参照

`STD_CompareString, STD_CompareNString`

## 履歴

2008/10/ 6 `STD_CompareNString()`との違いの追記
2008/ 9/26 定義の修正
2005/10/ 5 初版