C和指针 第六章 编程练习 第一题

在C语言学习中,遇到第六章编程练习第一题,涉及实现类似strpbrk的功能。代码示例中存在错误,即在返回常量字符串指针时未进行正确类型转换。解决方案是在return语句前添加(char *)类型转换,确保返回值匹配。此题强调了const关键字在指针操作中的重要性和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      今天做 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。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值