2012-06-03 118 views
1

我要處理一個字符串數組,所以它是字符數組如何將指針傳遞給字符串數組(char * p [])?

我已經定義的字符串那樣

char que1[4][LEN_STRING]={{'\0'}}; 

的陣列,並且我想將它們傳遞給函數

void print_results(char *pqueries[],document p_docs[]); 

使用簡單

print_results(que1,indoc); 

個結果在「預期‘字符**’,但參數的類型爲‘CHAR(*)[30]’」

我什至不知道香港專業教育學院實際上定義函數簽名corrent,

幫助會非常感謝

謝謝

+1

'char * p []'不是「指向字符串數組的指針」。它是一個char指針數組。 – nhahtdh

回答

1

一個數組的數組是不一樣的指針數組。參見C常見問題更多詳情:http://c-faq.com/aryptr/pass2dary.html

一種解決方案是修改函數採取固定寬度的字符串:

void print_results(char (*pqueries)[LEN_STRING],document p_docs[]); 
+0

工程就像一個魅力!非常感謝你brotha ... – YNWA

0

,因爲它是字符數組的數組,可以將其衰減到 指針的陣列(每一個指針表示字符數組的位置) 並因此使用此:char ** que1;

for(int z = 0;z<4;z++) 
     { 
      *que1[z] = malloc(LEN_STRING*(sizeof(char)); 
      memset(que1[z], '\0', (size_t)LEN_STRING); 

     } 

現在就可以調用這個:

print_results(que1,indoc); 

print_results(que1,indoc)的定義是:

void print_results(char **pqueries,document p_docs[]); 
{ 

//access *[pqueries] in a for loop for each stored character 


} 

RGDS, 多愁善感

0

是一個正確聲明/清晰度將爲

void print_results(char pqueries[][LEN_STRING],document p_docs[]); 
void print_results(char pqueries[][LEN_STRING],document p_docs[]) 
{ 
    ... 
    sprintf(pqueries[0],"%.*s",LEN_STRING-1,"blah0"); 
    ... 
    sprintf(pqueries[3],"%.*s",LEN_STRING-1,"blah3"); 
}