名稱空間
變體
操作

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 大於該字元陣列的大小,則行為未定義。
與所有邊界檢查函式一樣,只有當實現定義了 __STDC_LIB_EXT1__ 且使用者在包含 <string.h> 之前將 __STDC_WANT_LIB_EXT1__ 定義為整數常量 1 時,才能保證 strnlen_s 可用。

目錄

[編輯] 引數

str - 指向要檢查的以空字元結尾的位元組字串的指標
strsz - 要檢查的最大字元數

[編輯] 返回值

1) 以空字元結尾的位元組字串 str 的長度。
2) 成功時,以空字元結尾的位元組字串 str 的長度;如果 str 是空指標,則為零;如果未找到空字元,則為 strsz

[編輯] 注意

strnlen_swcsnlen_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 strlen 函式 (p: 待定)
  • K.3.7.4.4 strnlen_s 函式 (p: 待定)
  • C17 標準 (ISO/IEC 9899:2018)
  • 7.24.6.3 strlen 函式 (p: 待定)
  • K.3.7.4.4 strnlen_s 函式 (p: 待定)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.24.6.3 strlen 函式 (p: 372)
  • K.3.7.4.4 strnlen_s 函式 (p: 623)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.21.6.3 strlen 函式 (p: 334)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 4.11.6.3 strlen 函式

[編輯] 另請參閱

返回寬字串的長度
(函式) [編輯]
返回下一個多位元組字元的位元組數
(函式) [編輯]
C++ 文件 適用於 strlen