c strlen & C++ strlen
来源:互联网 发布:手机淘宝查排名 编辑:程序博客网 时间:2024/06/15 07:06
先看下面几个例子:
/* 定义数据 */
...
char *msg1 = "testtest";
char *msg2 = "test";
int len = 20, t = 1;
...
1-----> if( strlen(msg2) >= strlen(msg1) )... //right
2-----> if( strlen(msg2) - strlen(msg1) >= 0 )... //"error"
3-----> if( strlen(msg2) >= 10 ).... //right
4-----> if( strlen(msg2) - 10 >= 0 ).... //"error"
5-----> if( strlen(msg2) - len >= 0 )... //"error"
6-----> if( t - strlen(msg2) >= 0 )... //"error"
7-----> if( t >= strlen(msg2) )... //right
我们这里所说的"error"不是说语法上出错。语法上都没错,编译运行也都能通过。这里的"error"指的是:这条语句无法按照你预想的那样工作。2,4,5,6这四条语句的结果将永远是真。
为什么呢?
我们先看库函数 strlen 的原型吧:
size_t strlen( char const *string );
注意strlen返回一个类型为size_t的值。那么size_t是什么类型呢?这个类型是在头文件stddef.h中定义的,它是一个无符号整数类型。问题出来了,在表达式中使用无符号数可能导致不可预料的后果。
当表达式中存在有符号类型和无符号类型时,所有的操作数都自动转换为无符号类型。无符号数的运算结果绝对不可能是负的。所以,2,4,5,6这四条语句的结果将永远是真。
遇到这样的情况,你要么用1,3,7这样的形式,要么将strlen的返回值强制性转换为int。
string类型不能用strlen()求长度的,strlen只适全char *类型的.
如果要求的话得先把string类型转换成char *类型,用c_str()函数转换
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str="fjaljjfj";
int len;
len=strlen(str.c_str());
cout<<len<<endl;
return 0;
}
- c strlen & C++ strlen
- c strlen & C++ strlen
- strlen.c
- C strlen
- C strlen vs sizeof
- C语言实现strlen
- C语言练习题---strlen()
- 【C语言】 实现strlen
- C sizeof() 与 strlen()
- C sizeof 与 strlen()
- C语言---strlen陷阱
- C strlen( ), sizeof
- c strlen & C++ strlen,求长度问题
- sizeof和strlen【C/C++】
- C/C++--strlen函数实现
- c/c++:strlen源码剖析
- strlen ( )【C语言库函数源代码】
- C语言之strlen函数
- 深入理解JVM之JVM内存区域与内存分配
- 彻底解决matplotlib中文乱码问题
- python时间转换器
- ATGM336H中科微三模北斗定位模组简介
- shiro功能架构分析
- c strlen & C++ strlen
- mongoDB server使用
- Java 8 中的 Streams API 详解
- bzoj 1617: [Usaco2008 Mar]River Crossing渡河问题(DP)
- Linux 防火墙开放特定端口 (iptables)
- 新媒体运营如何设置KPI?
- VIJOS-P1327 回文词(动态规划)
- javascript高级程序设计第三版 第四章 变量、作用域和内存问题
- Django学习之路(五)template的学习