C++ 函数形参里的const char作为返回值问题

char*strFind(constchar*str,constchar*substr){inti,j;intm=strlen(str);intn=strlen(subs... char * strFind(const char * str,const char * substr)
{
int i,j;
int m= strlen(str);
int n= strlen(substr);
for ( i=0;i<=m-n;++i)
{
for ( j=0;j<n;++j)
{
if(str[i+j]!=substr[j])break;
}
if (j==n)
{
return str+i;
}
}
return NULL;
}
VC++6.0的环境。会提示无法将const char*转换成char*。去掉形参里的const修饰就没有问题。为什么。返回的话没有修改吧。吧str+i改成str同样不行。
展开
 我来答
xoaxa
推荐于2018-04-12 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3479万
展开全部

形参是char *类型,实参是cons chart *类型时,编译程序会给出错误信息,意思是被调函数可以改变串的内容,而实参又是const类型,这样的实参不允许改变,二者之间不能融合,即使函数不改变形参的内容也不行。

但形参是const char *,实参是 char *是可行的,当要返回形参指针时,其返回类型必须是const char *。

/*

Yes.

Press any key to continue

*/

#include <stdio.h>
#include <string.h>

const char *strFind(const char *str,const char *substr) {
int i,j;
int m = strlen(str);
int n = strlen(substr);
for(i = 0; i <= m - n;++i) {
for(j = 0;j < n;++j) {
if(str[i + j] != substr[j]) break;
}
if(j == n) {
return str + i;
}
}
return NULL;
}

int main() {
char s[] = "please sit down.";
char t[] = "down";
const char *pstr = strFind(s,t);
if(pstr) printf("Yes.\n");
else printf("No.\n");
return 0;
}
投机士
2015-10-14 · TA获得超过10.5万个赞
知道大有可为答主
回答量:2.5万
采纳率:0%
帮助的人:4001万
展开全部
第一个函数,因为传入的变量是一个常量不能被修改,而参数是可以修改的,所以报错。
第二个函数,因为参数表身表明不可修改,所以变量是不是变量就无所谓了,都不会被修改。不会报错。

这实际上和普通的思维逻辑是一致的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式