由于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;
}
注意:在计算字符串的长度的时候空字符并不考虑在内