我被困在一些没有评分的作业上(这意味着练习).
我必须创建一个名为find_name的函数,它接受2个参数.第一个参数是名称(字符串)的二维数组,第二个参数是用于在二维数组中查找名称的字符串,如果找到其他0,则函数必须返回1.
当我调用该函数(现在为空)时,我收到此警告:从不兼容的指针类型传递’find_name’的参数1
这是重要的一点.
在主要
char strNameList[][2] = { { "Luca","Daniel"},{"Vivan","Desmond"},{"Abdul","Justin"},{"Nina","Marlene"},{"Donny","Kathlene"} }; char strFindName[] = "\0"; printf("Please enter a name to look for: "); gets(strFindName); nSearch = find_name(strNameList,strFindName);
int find_name(char strNameList[][2],char strLookUp[])
我是C的新手(我是学生),我对字符串(字符串数组等)感到困惑.
解决方法
我假设你想要一个二维char指针数组.您在程序中的两个位置都声明strNameList不正确.你有:
char strNameList[][2] = { { "Luca","Kathlene"} };
但是char [] [N]声明了一个字符串的二维数组,而不是char *因此,你正在被编译器警告你要为char类型的项目分配一大堆指针值
将您的声明(您的变量和函数参数)更改为:
const char *strNameList[][2]
它声明了一个包含两个char *的未知长度数组的数组,现在它与您的初始化列表相匹配.此外,添加const是因为(a)我假设您没有计划在函数中修改该名称列表,并且(b)通过初始化程序分配给char *的可写字符串文字声明是C中未定义的行为,并且正式弃用在C中,所以你不应该使用它.同样,您的lookup-name也可能未被修改,因此也将其声明为const.
结果:
const char * strNameList[][2] = { {"Luca","Kathlene"} };
在你的功能:
int find_name(const char * strNameList[][2],const char strLookUp[])
最后但同样重要的是,除非你有一个水晶球,否则你的find_name()函数无法知道给定的信息在传递的名单中有多少名字.我宁愿你现在看到这一点,而不是想知道后来发生了什么.您需要(a)使用find_name()知道的标记值终止列表,或者(b)将列表中的名称数传递给find_name().对于他们自己,但我更喜欢后者:
int find_name(const char * strNameList[][2],size_t nNameListSize,const char strLookUp[])
并通过以下方式在呼叫者方面调用它:
find_name(strNameList,sizeof(strNameList)/sizeof(strNameList[0]),strFindName)