c++ Prime读书笔记3(strlen)

由于C 风格字符串的底层low-level 特性C C++的初学者很容易在这上面出错

在下面的一系列程序中我们罗列了一些初学者易犯的错误程序的任务很简单计算st

长度不幸的是第一个尝试就是错误的你能看到问题所在吗

#include <iostream>

const char *st = "The expense of spirit/n";

int main() {

int len = 0;

while ( st++ ) ++len;

cout << len << "; " << st;

return 0;

}

程序失败是因为st 没有被解除引用即

st++

测试的是st 中的地址是否为零而不是它指向的字符是否为空这个条件将一直为真

因为循环的每次迭代都给st 中的地址加1 程序将永远执行下去或者由系统终止它这样的

循环被称作无限循环infinite loop

正确的程序如下:

// strlen.cpp : 定义控制台应用程序的入口点。

//

 

#include "stdafx.h"

#include <iostream>

using std::cout;

using std::endl;

 

const char *st = "The expense of spirit/n";

 

int _tmain(int argc, _TCHAR* argv[])

{

     if( *st == NULL)

         cout<<"The str is NULL"<<endl;

 

     int len = 0;

     while( *st )

     {

         len++;

         st++;

     }

     cout<<"The len is "<<len<<endl;

 

     cout<<"The str is:/t"<<st-len<<endl;

     return 0;

}

 注意:在计算字符串的长度的时候空字符并不考虑在内
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值