今天做 C和指针 第六章 编程练习 第一题 碰到一些问题。
题目要求编写一个函数,实现的功能就是C函数库的strpbrk。答案给的代码是:
/*
** Find the first occurrence in ’str’ of any of the characters in ’chars’ and
** return a pointer to that location. If none are found, or if ’str’ or ’chars’
** are NULL pointers, a NULL pointer is returned.
*/
#define NULL 0
char *
find_char( char const *str, char const *chars )
{
char *cp;
/*
** Check arguments for NULL
*/
if( str != NULL && chars != NULL ){
/*
** Look at ’str’ one character at a time.
*/
for( ; *str != ’\0’; str++ ){
/*
** Look through ’chars’ one at a time for a
** match with *str.
*/
for( cp = chars; *cp != ’\0’; cp++ )
if( *str == *cp )
return str;
}
}
return NULL;
}
很明显,str已经是const了,红字标出的return str,肯定不对(返回值类型和函数类型不匹配)。
这个时候要在return str前进行类型转换,return (char* ) str; 这样就不会出错了。
很显然,定义一个cp是有必要的。
const是个很麻烦的东西。
char const * s1 = "hello ,world "; printf( "%c", *s1 ); 最后打印出的是h。