我正在尝试编写一个函数来搜索查找指定键的数组.参数n指定数组的有效大小,必须根据strcmp强加的字典顺序进行排序.如果找到键,则函数返回数组中出现该键的索引.因此,它可以返回子字符串的索引.但是,它出现了两个我无法解决的错误.请帮忙.
jiebin@jiebin-ThinkPad-Edge-E530:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$ gcc FindStringInSortedArray.c -o FindStringInSortedArray
FindStringInSortedArray.c: In function ‘FindStringInSortedArray’:
FindStringInSortedArray.c:7:3: warning: passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
/usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘char **’
jiebin@jiebin-ThinkPad-Edge-E530:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
#include<stdio.h>
#include<string.h>
int FindStringInSortedArray(char *key,char *array[],int n)
{
int mid,cmp;
int low=strlen(array)-n;
int high=n;
if(low > high) return(-1);
mid = (low+high)/2;
cmp = strcmp(key,array[mid]);
if(cmp==0) return(mid);
if(cmp<0){
return(FindStringInSortedArray(key,array,n/2));
}else{
return(FindStringInSortedArray(key,array+n/2,n));
}
}
int main()
{
char key[2]="ab";
char *array[10]={"ab","bc","cd","de","ef","fg","gh","hi","ij","jk"};
int test=FindStringInSortedArray(key,array,10);
printf("Result:%d\n",test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int low=strlen(array)-n;是错的.将数组大小作为不同的参数传递,如:
int FindStringInSortedArray(char *key,char *array[],int n, int arraysize)
Run Code Online (Sandbox Code Playgroud)
因为数组在函数中衰减成指针.strlen声明的形式
strlen (const char*)
Run Code Online (Sandbox Code Playgroud)
你正在传递*array[]他的类型衰败char * *.
在C99中,有三种基本情况,其中数组名称不会衰减为指向第一个元素的指针:
当它是&(address-of)运算符的参数时.
当它是sizeof运营商的论点时.
当它是一个字符串文字的类型char [N + 1]或一个宽字符串文字的类型wchar_t [N + 1](N是字符串的长度),用于初始化一个数组,如在char str[] = "foo";或wchar_t wstr[] = L"foo";.
在C11中,新引入的alignof运算符也不允许其数组参数衰减为指针.