先看下面几个例子:

/* 定义数据 */

...
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相关推荐

  1. java使用strlen_java – “strlen(s1) – strlen(s2)”永远不会小于零

    你遇到的是在处理包含有符号和无符号数量的表达式时在C中出现的一些特殊行为. 当执行其中一个操作数被签名并且另一个被无符号的操作时,C将隐式地将带符号的参数转换为无符号并且执行假设数字是非负的操作.这个 ...

  2. strlen“好神奇”,永真式——if(strlen(q) - strlen(p) = 0)

    今天突然发现神奇的一幕 这个if中居然是个永真式 怎么可能 char *p = "aaaaaaaa";char *q = "ssss";int x = strl ...

  3. 比较分析与数组相关的sizeof和strlen

    // 形如: int a[]={1,2,3,4,5}; char name[]="abcdef"; 无论是整型数组还是字符数组,数组名作为右值的时候都代表数组首元素的首地址. 数组 ...

  4. C++中的sizeof与strlen对比

    1.sizeof 是可用来计算字符串的总长度,包括\0 2.strlen计算不包含\0的字符串的长度 3.32位机器上,指针需要4个字节存储:64位机器上,指针需要8个字节存储 #include &q ...

  5. 库函数strlen源码重现及注意问题

    首先直接上源码: size_t strlen (const char * str) {const char *eos = str;while(*eos++);return(eos - str - 1) ...

  6. sizeof和strlen解析

    1.strlen函数. strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符 '\0'为止,然 ...

  7. C++ sizeof与strlen

    sizeof与strlen的区别 基础知识: (1)sizeof <1> sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可 ...

  8. C语言-求字符串长度-strlen()与sizeof()

    需要在代码头部加上标准库<string.h> 代码示例 #include <string.h>char s1[20] = "hello world"; ch ...

  9. sizeof()与strlen()

    sizeof()可以计算所有类型,strlen()仅计算字符串. sizeof计算对象所占内存字节数,strlen()计算字符个数,遇到'\0'截止. char *a; char b[5]; size ...

最新文章

  1. 使用Sublime Text 3作为Python编辑器有关中文问题
  2. 华为手机怎么设置应用不全屏显示_手机投屏智能电视画面比例不合适怎么办?...
  3. linux发送数据包需要两次路由,linux – 在tracepath期间导致火星数据包(目前为止)的路由策略有多么破碎?...
  4. mysql之触发器before和after的区别
  5. 在pascal环境下学习record
  6. 学习和考取HCIE的普遍经典过程,你肯定是遇到了其中的某些问题?这里有你要的答案...
  7. Python_正则(设置pattern变量实例)
  8. dedecms织梦让channelartlist标签支持currentstyle属性
  9. latex 数字上标 指数怎么打
  10. matlab中的m-file,MATLAB m-file帮助格式化
  11. 黑马程序员-Java基础,Java集合Collection和Iterator接口
  12. paip.验证码识别---图像处理类库
  13. django 项目中使用项目环境制作脚本 通过终端命令运行脚本文件(management/commands)...
  14. RK3128功能介绍
  15. PyTorch实战 | 文本情感分类任务 | LSTM与LSTM+Attention | TextCNN
  16. vue简化技巧之‘hook:生命周期‘
  17. 0/1背包问题 - 如何理解 解空间
  18. linux桌面lxde 安装_Ubuntu下安装LXDE桌面+noVNC直接WEB管理
  19. “渴了么”软件详细说明书
  20. win10亮度_Win10玩游戏优化设置教程,八大游戏优化设置,让游戏体验更佳

热门文章

  1. 404 not found ------ nginx ----- lnmp/lnmpa centOS7
  2. Django ORM 级联删除
  3. C++primer 10.6节练习
  4. 学会四招让你在linux下安装程序变得简单
  5. Sum All Primes
  6. 区块链:新经济蓝图及导读
  7. POJ 1741 Tree(树分治)
  8. Python 语言介绍
  9. Mysql 事务锁表,解决方法
  10. 微型项目实践(8):数据访问的实现