一道C语言改错题

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:28:24
下列给定程序中函数fun的功能是:统计子字符串substr在字符串str中出现的次数。例如,若字符串为aaas lkaaas,子字符串为as,则应输出2。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
/*************found**************/
int fun(char *str,*substr)
{
int i, j, k,num=0;
/*************found**************/
for(i=0,str[i],i++)
for(j=i,k=0;substr[k]==str[j];k++,j++)
if(substr[k+1]=='\0')
{
num++;
break;
}
return num;
}
void main()
{ char str[80],substr[80];
printf("Input a string: ");
gets(str);
printf("Input a substring: ");
gets(substr);
printf("%d\n ",fun(str,substr));
}

【参考答案】
(1)错误:int fun(char *str, *substr)
正确:int fun(char *str, char *substr)
(2)错误:for (i=0, str[i], i++)
正确:for (i=0;str[i];i++)

在第一处int fun(char *str,*substr)为什么不对?

在第一处int fun(char *str,*substr)为什么不对?
定义变量不是能一起定义的吗?

不能!定义形参时时必须指明每一个形参的类型,这是规定:)

int fun(char *str,*substr)
不能这么定义

这么定义是语法说明错误!

这里不是定义变量的,这是函数中的形参,由题意,fun函数中有两个形参,每个形参都指定为char*型