2013-11-26 270 views
3

我正在嘗試編寫一個函數來搜索數組以查找指定的鍵。參數n指定數組的有效大小,它必須按照strcmp施加的字典順序排序。如果找到該鍵,該函數將返回數組中出現該鍵的索引,因此它可以返回子字符串的索引。但是,它帶來了兩個錯誤:我無法解決。請幫助。期望'const char *',但參數的類型爲'char **'in C

[email protected]:~/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 **’ 
[email protected]:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$ 

這是我的代碼:

#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; 
} 
+0

但我必須使用相同的函數原型爲「FindStringInSortedArray(字符串鍵,字符串數組[],int n) – luojiebin

+0

'char key [2] =「ab」;'也是錯誤的,你不會留下足夠的空間給字符串終結符。 。 – glglgl

回答

7

int low=strlen(array)-n;是錯誤的。將數組大小作爲不同參數傳遞,如:

int FindStringInSortedArray(char *key,char *array[],int n, int arraysize) 

由於數組衰減爲函數中的指針。 strlen的宣言的形式

strlen (const char*) 

和你逝去的*array[]其類型衰變爲char * *

在C99有三個基本的情況下,陣列名稱不衰變成指針第一元素:

  1. 當它是&(地址)的操作者的參數。

  2. 當它是sizeof運算符的參數。

  3. 當它的字面char [N + 1]型或寬字符串文字wchar_t [N + 1]型的(N是串的長度),其被用來初始化一個數組,如在char str[] = "foo";wchar_t wstr[] = L"foo";的字符串。

在C11,新引入的alignof操作員不讓其數組參數衰變到一個指針要麼。

2

當您致電strlen時,它期待char*(即一個字符串)作爲參數,但您提供array這是一個char**(即字符串數組)。

你想要的是數組的大小,我猜。有沒有辦法知道它,C中的唯一方法是對數組的大小作爲參數傳遞:

int FindStringInSortedArray(char *key,char *array[],int n, int len) 
相關問題