strnlen、strnlen_s、strnlen_l、wcsnlen、wcsnlen_s、wcsnlen_l、_mbsnlen、_mbsnlen_l、_mbstrnlen、_mbstrnlen_l
渡された現在のロケールまたはそのを使用して文字列の長さを取得します。これらは strlen、strlen_l、wcslen、wcslen_l、_mbslen、_mbslen_l、_mbstrlen、_mbstrlen_lのセキュリティが強化されたバージョンです。
重要 |
---|
_mbsnlen、_mbsnlen_l、_mbstrnlenと _mbstrnlen_l は Windows ランタイムで実行されるアプリケーションで使用することはできません。詳細については、でサポート /ZW CRT 関数" "を参照してください。 |
size_t strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s(
const char *str,
size_t numberOfElements
);
size_t strnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_l(
const wchar_t *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbsnlen(
const unsigned char *str,
size_t numberOfElements
);
size_t _mbsnlen_l(
const unsigned char *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbstrnlen(
const char *str,
size_t numberOfElements
);
size_t _mbstrnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
パラメーター
str
NULL で終わる文字列。numberOfElements
文字列バッファーのサイズ。locale
使用するロケール。
戻り値
これらの関数は、文字列の終端の null 文字を含む文字数を返します。文字列 (または wcsnlenのワイド文字) の numberOfElements の最初のバイト内に null 終端文字がない場合は、エラー ステータスを表示する numberOfElements が返されます; null で終わる文字列に厳密に numberOfElements未満の長さがあります。
文字列に無効なマルチバイト文字が含まれる場合_mbstrnlen と _mbstrnlen_l は -1 を返します。
解説
[!メモ]
strnlen は strlenに代わるものではありません; strnlen 例は、ネットワーク パケット サイズに対して既知のバッファーの受信信頼できないデータのサイズを計算するために使用するためのものです。strnlen は、文字列が終端の長さを計算しますが、バッファーの末尾を超えて歩きません。他の状況では、strlenを使用します。(これは wcsnlen、_mbsnlenと _mbstrnlenに適用されます)。
これらの関数は strの (終端の null 文字を含む文字数を返します。ただし、strnlen と strnlen_l はバイト文字列として文字列を解釈し、したがって、戻り値はマルチバイト文字列が文字が含まれている場合でも、バイト数と同じ常にです。wcsnlen と wcsnlen_l は、それぞれ strnlen と strnlen_l のワイド文字バージョンです; wcsnlen と wcsnlen_l の引数は文字列で、文字数はワイド文字単位にあります。それ以外 wcsnlen、wcsnlen_l、strnlen と strnlen_l は同じです。
strnlen、wcsnlen, と _mbsnlen は、パラメーターを検証しません。str が NULL場合、アクセス違反が発生します。
strnlen_s と wcsnlen_s は、パラメーターを検証します。str が NULLの場合、関数は 0 を返します。
_mbstrnlen は、パラメーターを検証します。str が NULLであるか、または numberOfElements が INT_MAXより大きい場合、_mbstrnlen は パラメーターの検証に説明されているように、無効なパラメーターの例外を生成します。実行の継続が許可 _mbstrnlen は EINVAL に errno を設定し、-1 を返します。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen_l |
_mbsnlen_l |
wcsnlen_l |
_mbsnlen と _mbstrnlen、マルチバイト文字列のマルチバイト文字数を返します。_mbsnlen は、現在使用中であるまたは渡されたロケールに従ってマルチバイト文字シーケンスを認識し、マルチバイト コード ページに従って; これは、マルチバイト文字の有効性はテストされません。_mbstrnlen、マルチバイト文字の有効性をテストし、マルチバイト文字シーケンスを認識します。_mbstrnlen に渡される文字列に無効なマルチバイト文字が含まれる場合は、errnoEILSEQに設定されます。
出力値は、LC_CTYPE ロケールのカテゴリの設定で決まります。; 詳細については、setlocale、_wsetlocale を参照してください。これらの関数の各バージョンは同じただし、_l のサフィックスの使用が _l のサフィックスを渡されたロケール パラメーターを使用する代わりに、このバージョンおよびロケール依存の動作の現在のロケールないものです。詳細については、「ロケール」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
strnlen, strnlen_s, strnlen_l |
<string.h> |
wcsnlen, wcsnlen_s, wcsnlen_l |
<string.h> または <wchar.h> |
_mbsnlen, _mbsnlen_l |
<mbstring.h> |
_mbstrnlen, _mbstrnlen_l |
<stdlib.h> |
追加の互換性の詳細については、互換性を参照してください。
使用例
// crt_strnlen.c
#include <string.h>
int main()
{
// str1 is 82 characters long. str2 is 159 characters long
char* str1 = "The length of a string is the number of characters\n"
"excluding the terminating null.";
char* str2 = "strnlen takes a maximum size. If the string is longer\n"
"than the maximum size specified, the maximum size is\n"
"returned rather than the actual size of the string.";
size_t len;
size_t maxsize = 100;
len = strnlen(str1, maxsize);
printf("%s\n Length: %d \n\n", str1, len);
len = strnlen(str2, maxsize);
printf("%s\n Length: %d \n", str2, len);
}
同等の .NET Framework 関数
参照
関連項目
strncat、_strncat_l、wcsncat、wcsncat_l、_mbsncat、_mbsncat_l
strncmp、wcsncmp、_mbsncmp、_mbsncmp_l
strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l
strrchr、wcsrchr、_mbsrchr、_mbsrchr_l