非常教程

C参考手册

字符串 | Strings

strnlen_s

在头文件<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的错误值不会暴露即将发生的缓冲区溢出。 与所有边界检查函数一样,只有当__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):
    • 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函数

扩展内容

wcslenwcsnlen_s(C95)(C11)

返回一个宽字符串的长度(函数)

mblen

返回下一个多字节字符(函数)中的字节数

|strlen的 C ++文档 |

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。