|
|
楼主 |
发表于 2013-10-22 21:46:31
|
显示全部楼层
剖析:  
考查对基本功的掌握: (1)字符串以'\0'结尾; 
(2)对数组越界把握的敏感度; 
(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案: 
 2分 
void strcpy( char *strDest, char *strSrc ) 
{ 
    while( (*strDest++ = * strSrc++) != '\0' ); 
}  
4分 
void strcpy( char *strDest, const char *strSrc ) //将源字符串加const,表明其为输入参数,加2分 
{ 
    while( (*strDest++ = * strSrc++) != '\0' ); 
}  
7分 
void strcpy(char *strDest, const char *strSrc) 
{ 
   //对源地址和目的地址加非0断言,加3分 
   assert( (strDest != NULL) && (strSrc != NULL) );    
while( (*strDest++ = * strSrc++) != '\0' ); 
}  
10分 
//为了实现链式操作,将目的地址返回,加3分!  
char * strcpy( char *strDest, const char *strSrc ) 
{ 
  assert( (strDest != NULL) && (strSrc != NULL) );   
char *address = strDest; 
  while( (*strDest++ = * strSrc++) != '\0' );    
return address; 
}
(4)对strlen的掌握,它没有包括字符串末尾的'\0'。 
读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为  
int strlen( const char *str ) //输入参数const  
{ 
  assert( strt != NULL ); //断言字符串地址非0  
  int len; 
  while( (*str++) != '\0' )  
{ 
   len++;  
} 
  return len; 
} |
|