strlen 函数
2019-08-16 07:44:19来源:博客园 阅读 ()
strlen 函数
C 语言 strlen 函数,用于得到字符串长度,今天我们来聊聊这个函数,先看看这段代码吧
1 int main() 2 { 3 char s[] = "Hello String"; 4 printf("value of s =%s\n", s); 5 printf("sizeof s = %d\n", sizeof(s)); 6 printf("length of s = %d.\n", strlen(s)); 7 return 0; 8 }
输出的结果如下:
strlen 返回结果和 sizeof 不一致, sizeof 返回值比strlen 多1,strlen 判断 '\0' 作为字符串结束标志, '\0'不算在字符串长度内。sizeof 是计算内存中占用的长度,'\0' 是需要有一位来保存的,它算在 s 中,所以返回值会比strlen 多1.
在使用 strlen 这一类字符串函数时,需要引用对应的头文件,需要引用 <string.h>, 在命令行输入: whereis string.h, 可看到文件目录为 /usr/include/string.h。
(在windows 环境安装 VS 后,文件大致在这个C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include 位置)
Linux中打开头文件,查看到函数原型声明如下:
__BEGIN_NAMESPACE_STD /* Return the length of S. */ extern size_t strlen (const char *__s) __THROW __attribute_pure__ __nonnull ((1)); __END_NAMESPACE_STD
WINDOWS:
_Check_return_ size_t __cdecl strlen(_In_z_ const char * _Str);
先只关注到函数声明的本体
extern size_t strlen (const char *__s)
传入参数const char *, 返回值为 size_t, 如果让我们自己来实现这个函数,可能的代码如下
1 size_t mstrlen(const char *s) 2 { 3 assert(s!=NULL); 4 size_t n=0; 5 while(*s++ != '\0' && ++n) 6 ; 7 return n; 8 }
作为一个C、C++语言的编程习惯,传入参数为指针的时候,先判断是否为空.
定义 size_t 类型的变量,初始化为0,这一句也很重要。
如果我们不初始化为0,得到的结果未定义。
如果我们把第4行代码改为 size_t n;
结果如下
运行同一个程序三次,获取的结果不相等,结果是随机的。
while 条件中我应用了 C和C++的短路求值属性,如果第一个条件满足了,中间是 "&&" 连接,第二个表达式才会被执行,
如果中间是 "||", 只有第一个条件不满足时,第二个表达式才会被执行。(目前大部分语言都支持短路求值short evaluation, 就我所熟悉的几种语言来说,只有VB 不支持)
第6行只有一个C的行结束符号 ";", 它是针对while 循环的,因为我的 ++n 放在循环体表达式中,这里不需要做任何事情,但是我必须告诉编译器这里有 while 循环体中的逻辑. 如果我不加分号,结果如下
返回结果为1,因为while循环只会执行一次。
注: 我在写 mstrlen 时用的短路求值,在实际中,如果用它能提高效率,那么尽量用短路求值。不然我们需要尽可能的写出容易读懂,便于维护的代码。
原文链接:https://www.cnblogs.com/kylinhu/p/11131872.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:P2670 【扫雷游戏】
下一篇:对C++类的继承和派生的理解
- C++ 转换函数搭配友元函数 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ const成员函数 2020-06-03
- C++ 析构函数 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash