函数的实现要考虑全面,注重程序的代码风格,提高程序的健壮性。
strcpy函数的实现:将源字符串的内容拷贝到目的字符串中,后面的'\0'也是要拷贝到目的字符串中的。所以在调用库函数时要注意数组越界的问题。
代码
char* strcpy( char *strDest,const
char *strSrc ) { //将源字符串加const,表明其为输入参数
assert( ( strDest != NULL ) && ( strSrc != NULL ) );//assert是宏不是函数,assert( strDest && strSrc )
char *address = strDest;
while( ( *strDest++ = *strSrc++ ) != '\0' );
return address; //为了实现链式操作,将目的地址返回
}
strstr(s1,s2)是一个经常用的函数,他的作用就是在字符串s1中寻找字符串s2如果找到了就返回指针,否则返回NULL。
const char* strstr( const char *s1, const char *s2 ) {
assert ( s2 && s1 );
const char *p = s1, *r = s2;
while ( *p++ == *r++ );
if ( *r == '\0' )
return p;
else {
r = s2;
p = ++s1;
}
return NULL;
}
const char* _strstr( const char *str, const char *needle ) {
assert( needle && src );
const char *p1 = src, *p2 = needle;
while ( ( *src != '\0' ) && ( *needle != '\0' ) ) {
if ( *src++ != *needle++ ) {
needle = p2; //重置needle
src = ++p1; //从下一个字符开始搜索needle
}
}
if ( *needle == '\0' )
return p1;
return NULL;
}