2009-02-09 58 views
3

傳遞主:Ç - 通過引用多維數組具有已知尺寸

char *myData[500][9]; //dynamic rows?? 
char **tableData[500]={NULL};   //dynamic rows?? 
int r; 

newCallBack(db, &myData, &tableData, &r); 

和通入功能由:

void newCallBack(sqlite3 *db, char** mdat, char*** tdat, int* r) 
{ 

似乎不喜歡這個?有什麼建議麼?大量的例子在網上,當你不知道尺寸,現在嘗試它們....

謝謝。

+0

什麼是編譯器告訴你嗎? – MSN 2009-02-09 17:41:13

+0

mdat [r] [0] = ptr_f; //非法索引,不允許間接。然而,當這是主要的,不是一個問題。 (//從malloc返回的指針\t char * ptr_f;) – 2009-02-09 17:44:46

回答

3

首先,myData的問題在於它是錯誤的類型。 char * [] []會在你調用的函數中需要一個原型char ***(一個字符串的二維數組)。如果您不介意限制字符串的大小,該函數需要一個字符串列表,它是char * []或char [] []。

要獲得完全動態的數組大小,您必須使用malloc()和free()手動分配(並釋放!)內存,並將變量的類型更改爲char ** myData和char *** tableData 。

4

如果要改寫這個是這樣:

#define NUM_ROWS 500; 
#define NUM_COLS 9; 

char **myData = NULL; 
char *tableData = NULL; 
int i; 
int r; 

myData = malloc(sizeof(char *) * NUM_ROWS); 
if (!myData) 
    return; /*bad return from malloc*/ 

tableData = malloc(sizeof(char) * NUM_ROWS); 
if (!tableData) 
    return; /*bad return from malloc*/ 

for (i = 0; i < NUM_ROWS; i++) 
{ 
    myData[i] = malloc(sizeof(char) * NUM_COLS); 
    if (!myData[i]) 
     return; /*bad return from malloc*/ 
} 

你可以這樣調用newCallBack()這樣,如果你只是想訪問數據(myData的表資料,並[R):

/*prototype*/ 
void newCallBack(sqlite3 *db, char** mdat, char* tdat, int r); 

/*call*/ 
newCallBack(db, myData, tableData, r); 

或者這個,如果你希望能夠修改什麼VA RS myData的並表資料點和[R的價值:

/*prototype*/ 
void newCallBack(sqlite3 *db, char ***mdat, char **tdat, int *r); 

/*call*/ 
newCallBack(db, &myData, &tableData, &r);