正在阅读:C/C++编程新手错误语录(续二)C/C++编程新手错误语录(续二)

2005-09-16 10:08 出处:PConline 作者:宋宝华 责任编辑:moningfeng

(15)“C不高级,学C++、JAVA、C#才够味”

  也许谭浩强老师的C语言教材是绝大多数高校学生学习的第一门编程课程,所以在许多学生的心目中,觉得C是一种入门级的语言,他们舍弃基础而追逐花哨的Visual XXX、Java、ASP、PHP、.net,他们以为这样做“赚大了”。

  非也!

  C是一种多么富有魅力的语言!在今时的绝对多数底层开发中,仍然几乎被C完全垄断。这些领域包括操作系统、嵌入式系统、数字信号处理等。舍弃C的经济基础搭.net的高层建筑实在是危险。

  我们总是以为自己掌握了C,那么请写一个strcpy的标准函数。您的答案若是:

void strcpy( char *strDest, char *strSrc )
{
  while( (*strDest++ = * strSrc++) != ‘\0’ );
}


  很遗憾,您的程序只能拿到E。看看拿A的strcpy:

char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘\0’ );
return address;
}


  这个程序考虑了什么?

  (1)程序要强大:为了实现链式操作,将目的地址返回,函数返回类型改为char *

  (2)程序要可读:源字符串指针参数加const限制,表明为输入参数

  (3)程序要健壮:验证strDest和strSrc非空

  如果这三点中您只考虑到0点或1点,那么请回家好好修炼一下C。因为这个最简单的strcpy已验证出您的C语言基础只能叫做“入门”。

  再写个简单的strlen,这么写就好了:

int strlen( const char *str ) //输入参数为const
{
assert( strt != NULL ); //断言字符串地址非0
int len;
while( (*str++) != '\0' )
{
len++;
}
return len;
}


  由此可见,写好这些简单的函数也需要深厚的基本功,永远不要放弃对基本功的培养。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品