C

strnlen_s

strlen, strnlen_s

在头文件中定义
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的错误值不会暴露即将发生的缓冲区溢出。 与所有边界检查函数一样,只有当__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 <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标准(ISO / IEC 9899:2011):

扩展内容

wcslenwcsnlen_s(C95)(C11)返回一个宽字符串的长度(函数)
mblen返回下一个多字节字符(函数)中的字节数

|strlen的 C ++文档 |