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;

}