名前空間
変種
操作

strlen, strnlen_s

提供: cppreference.com
< c‎ | string‎ | byte
ヘッダ <string.h> で定義
size_t strlen( const char *str );
(1)
size_t strnlen_s( const char *str, size_t strsz );
(2) (C11およびそれ以降)
1) 指定されたバイト文字列の長さ、つまり、 str によって最初の要素が指されている文字配列内の、最初のヌル文字直前までの文字数を返します。
str がヌル終端バイト文字列を指すポインタでない場合、動作は未定義です。
2) (1) と同じですが、 str がヌルポインタの場合はゼロを返し、 str の先頭 strsz バイトにヌル文字が見つからなかった場合は strsz を返します。
str がヌル文字を含まない文字配列を指し、文字配列の長さ < strsz の場合、動作は未定義です。 別の言い方をすると、誤った strsz の値は切迫したバッファオーバーフローを露呈しません。
すべての境界チェック付き関数と同様に、 strnlen_s__STDC_LIB_EXT1__ が処理系によって定義されていて、 <string.h> をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。

目次

[編集] 引数

str - 調べるヌル終端バイト文字列を指すポインタ
strsz - 調べる最大文字数

[編集] 戻り値

1) ヌル終端バイト文字列 str の長さ。
2) 成功した場合はヌル終端バイト文字列 str の長さ、 str がヌルポインタの場合はゼロ、ヌル文字が見つからなかった場合は strsz

[編集] ノート

strnlen_s および wcsnlen_s は実行時制約ハンドラを呼ばない唯一の境界チェック付き関数です。 これらはヌル終端されていない文字列のための限定的なサポートを提供するのために使用される純粋なユーティリティ関数です。

[編集]

#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
#include <stdio.h>
 
int main(void)
{
    const char str[] = "How many characters does this string contain?";
 
    printf("without null character: %zu\n", strlen(str));
    printf("with null character:    %zu\n", sizeof str);
 
#ifdef __STDC_LIB_EXT1__
    printf("without null character: %zu\n", strnlen_s(str, sizeof str));
#endif
}

出力:

without null character: 45
with null character:    46
without null character: 45

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.24.6.3 The strlen function (p: 372)
  • K.3.7.4.4 The strnlen_s function (p: 623)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.21.6.3 The strlen function (p: 334)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.11.6.3 The strlen function

[編集] 関連項目

ワイド文字列の長さを返します
(関数) [edit]
次のマルチバイト文字のバイト数を返します
(関数) [edit]