c – 使用字符串的2D数组

前端之家收集整理的这篇文章主要介绍了c – 使用字符串的2D数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我被困在一些没有评分的作业上(这意味着练习).

我必须创建一个名为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)

猜你在找的C&C++相关文章