次の方法で共有


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 関数

System::String::Length

参照

関連項目

文字列操作 (CRT)

ロケール

マルチバイト文字のシーケンスの解釈

setlocale、_wsetlocale

strncat、_strncat_l、wcsncat、wcsncat_l、_mbsncat、_mbsncat_l

strncmp、wcsncmp、_mbsncmp、_mbsncmp_l

strcoll 系関数

strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l

strrchr、wcsrchr、_mbsrchr、_mbsrchr_l

_strset、_strset_l、_wcsset、_wcsset_l、_mbsset、_mbsset_l

strspn、wcsspn、_mbsspn、_mbsspn_l