请你找出以下代码的错误,并说明为什么#include<stdio.h> #include<string.h> int fun(char*str,char*substr); int main() { char str[1000],substr[1000]; int p; printf("请输入字符串"); gets(str); printf("请输入字串"); gets(substr); p=fun(char*str,char*substr); printf("%d",p); retrun 0; } int fun(char*str,char*substr){ int len1=strlen(str),len2=strlen(substr); int i,j; for(i=0;i<len1=i++) {for(j=0;j<len2;j++) {if((*str+i+j)==*(substr+j)) break; } } return (i); }
时间: 2023-12-09 17:03:20 浏览: 71
这段代码有以下几个错误:
1. 在调用函数fun时,不应该在参数前加上类型名(char*),应该直接传递参数即可。
2. 在for循环中,i的自增应该是 i++ 而不是 i=i++。
3. 在main函数的最后一行,return应该是小写的return,而不是retrun。
4. 使用gets函数时,不应该使用固定长度的数组来存储输入的字符串,因为可能会导致缓冲区溢出的问题。建议使用fgets函数,限制输入字符的长度,避免发生内存泄露的问题。
下面是修改后的代码:
```
#include<stdio.h>
#include<string.h>
int fun(char* str,char* substr);
int main() {
char str[1000],substr[1000];
int p;
printf("请输入字符串:");
fgets(str, sizeof(str), stdin);
printf("请输入字串:");
fgets(substr, sizeof(substr), stdin);
p=fun(str,substr);
printf("%d",p);
return 0;
}
int fun(char* str,char* substr){
int len1=strlen(str),len2=strlen(substr);
int i,j;
for(i=0;i<len1;i++) {
for(j=0;j<len2;j++) {
if(*(str+i+j)!=*(substr+j))
break;
}
if(j==len2)
return i;
}
return -1;
}
```
修改后的代码中,使用fgets函数读取输入的字符串,并且在函数fun中增加判断子串是否匹配的逻辑,修复了原代码的错误。
阅读全文