名前空間
変種
操作

strlen, strnlen_s

From 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 がその文字配列のサイズより大きい場合、動作は未定義です。
すべての境界チェック付き関数と同様に、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 <stdio.h>
#include <string.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

[編集] 参考文献

  • C23標準 (ISO/IEC 9899:2024)
  • 7.24.6.3 The strlen function (p: TBD)
  • K.3.7.4.4 The strnlen_s function (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.24.6.3 The strlen function (p: TBD)
  • K.3.7.4.4 The strnlen_s function (p: TBD)
  • C11標準 (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標準 (ISO/IEC 9899:1999)
  • 7.21.6.3 The strlen function (p: 334)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.11.6.3 The strlen function

[編集] 関連項目

ワイド文字列の長さを返す
(関数) [編集]
次のマルチバイト文字のバイト数を返す
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)