strlen, strnlen_s
提供: cppreference.com
ヘッダ <string.h> で定義
|
||
size_t strlen( const char *str ); |
(1) | |
(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
は実行時制約ハンドラを呼ばない唯一の境界チェック付き関数です。 これらはヌル終端されていない文字列のための限定的なサポートを���供するのために使用される純粋なユーティリティ関数です。
[編集] 例
Run this code
#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)