strlen, 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 ?的错误值不会暴露行将来临的缓冲区溢出。
同所有边界检查函数,?strnlen_s ?仅若实现定义了?__STDC_LIB_EXT1__?,且用户在包含?<string.h> ?前定义?__STDC_WANT_LIB_EXT1__?为整数常量?1?才保证可用。。
参数
str | - | 指向要检测的空终止字符串的指针 | strsz | - | 要检测的最大字符数量 |
返回值
1)?空终止字节字符串?str ?的长度。
2)?成功时为空终止字节字符串?str ?的长度,若?str ?是空指针则为零,若找不到空字符则为?strsz ?。
注意
strnlen_s ?与?wcsnlen_s ?是仅有的不调用运行时制约处理的边界检查函数。它们是用于提供空终止字符串受限制支持的纯功能函数。
注意:计算大小时不包括'\0'
示例
#include <string.h>
#include <stdio.h>
int main(void)
{
const char str[] = "How many characters does this string contain?";
printf("without null character: %d\n", strlen(str));
printf("with null character: %d\n", sizeof(str));
}
without null character: 45
with null character: 46
注意:strlen计算时,一定要确保字符数组是以空字符结束,如果没有则可能沿着数组在内存中的位置不断向前寻找,知道遇到空字符才停下来。?
#include "stdafx.h"
#include <iostream>
#include <cstring>
int main(){
char str[] = { 'H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd' };
size_t len = strlen(str);
std::cout << "length is " << len << std::endl;
return 0;
}
结果输出:
length is 23
请按任意键继续. . .
#include "stdafx.h"
#include <iostream>
#include <cstring>
int main(){
char str[] = "Hello,world";
size_t len = strlen(str);
std::cout << "length is " << len << std::endl;
return 0;
}
结果输出:
length is 11
请按任意键继续. . .
|