C语言题分析为什么错

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:50:09
输入3个单词,再输入1个单词在先前那个里查找有返回第几个 无返回-1
分析为什么错 不用给新源代码
#include<stdio.h>
#include<string.h>
#define N 3
int main(void)
{
int k,i;
char s1[N][10],s2[1][10];
printf("input s1:");
for(i=0;i<N;i++)
scanf("%s",&s1[i][10]);
printf("input s2:");
scanf("%s",&s2[1][10]);
int find(char*,char*);
k=find(s1,s2);
if(k==-1)
printf("not find");
else
printf("%d",k);
return 0;
}
int find(char*s1,char*s2)
{
int i;
for(i=0;i<N;i++){
if(strcmp((s1+i),s2)==0){
return i;
break;
}
return -1;
}
}
调试后错误如下
Compiling...
4.cpp
C:\Microsoft Visual Studio\MyProjects\4\4.cpp(14) : error C2664: 'find' : cannot convert parameter 1 from 'char [3][10]' to 'char *'
Types pointed to are u

你定义的S1,S2是二维数组,但是你的find()里的参数是一维数组,所以错了。

你想表达什么意思?

char s1[N][10],s2[1][10];
int find(char*,char*);
k=find(s1,s2);
if(k==-1)
问题在这里
一维二维没有弄清楚

#include<stdio.h>
#include<string.h>
#define N 3
int main(void)
{
int k,i;
char s1[N][10],s2[1][10];/*这里s2[10]就对了.注意下面也要改过来*/
printf("input s1:");
for(i=0;i<N;i++)
scanf("%s",&s1[i][10]);
printf("input s2:");
scanf("%s",&s2[1][10]);
int find(char*,char*);
k=find(s1,s2);
if(k==-1)
printf("not find");
else
printf("%d",k);
return 0;
}
int find(char*s1,char*s2)
{
int i;
for(i=0;i<N;i++){
if(strcmp((s1+i),s2)==0){
return i;
break;
}
return -1;
}
}

你定义的S1,S2是二维数组,二维数组相当于一个二重指针,而你写的是一个一维指针,当然会出现转换错误。