2012-10-08 23 views
0

可能重複:
How do I use arrays in C++?雙指針和數組模棱兩可的結果用C

我有以下的C代碼:

int main() { 
    char *pathvc[MAX_PATHS]; 
    parsePath(pathvc); 

    struct command_t command; 

    command.name = lookup(command.argv, pathvc); //command.argv is: char *argv[MAX_ARGS]; 
} 

char* lookupPath(char **argv, char **dir) { 
    //Some implementation 
} 

這是調試信息我在主要功能:

名稱:pathvc詳細信息:{0x804c208 「/ usr/lib中/ lightdm/lightdm」, 0x804c221 「在/ usr/local/sbin中」,0x804c231 「在/ usr/local/bin目錄」,0x804c240 「/ usr/sbin目錄」 0x804c24a 「在/ usr/bin中」,0x804c253 「/ sbin目錄」,0x804c259 「/ bin中」,0x804c25e 「在/ usr /遊戲」,爲0x0} 默認:0xbffff0a8十進制:3221221544十六進制:0xbffff0a8 二進制:10111111111111111111000010101000八:027777770250

名稱:pathvc [0]詳細說明:0x804c208 「/ usr/lib中/ lightdm/lightdm」

名稱:pathvc [1]詳細說明:0x804c221 「的/ usr/local/sbin中」

名稱:pathvc [2]詳細說明:0x804c231 「的/ usr/local/bin中」

名稱:pathvc [3]詳細說明:0x804c240 「/ usr/sbin目錄」

名稱:pathvc [4]詳細:0x804c24a 「的/ usr/BIN」

名稱:pathvc [5]詳細說明:0x804c253 「/ sbin目錄」

名稱:pathvc [6]詳細說明:0x804c259 「/ BIN」

名稱:pathvc [ 7]詳細信息:0x804c25e「/ usr/games」

然而,當我在查找功能通過pathvc,我得到這個:

名稱:DIR詳細信息:0xbffff0a8默認:0xbffff0a8十進制:3221221544 十六進制:0xbffff0a8二進制:10111111111111111111000010101000 八:027777770250

名稱:* DIR詳情:0x804c208 「/ usr/lib中/ lightdm/lightdm」

名稱:** DIR詳細信息:47 '/'

爲什麼我將指針數組傳遞給查找函數,該函數接受它作爲雙指針,但它只指向第一個路徑而不是完整的路徑列表。

請原諒我,如果我做的/問一個非常愚蠢的問題,因爲我不習慣於使用C

+0

'command.argv'似乎是單元化的。如果'lookup()'從指針數組中讀取,這將是未定義的行爲。 – hmjd

+0

@hmjd我們甚至不關心command.argv這裏。順便說一下,代碼是正確實現的,這裏給出的只是原型。 – Rafay

+1

@Spoilt,好的。我只能對發佈的代碼發表評論。我認爲相同數據結構的內容不匹配。取消引用未初始化的指針是未定義的行爲。我提到這可能是一個促成因素。 – hmjd

回答

2

指針這只是一個什麼樣的調試器知道此事。在調用者中,調試器可以看到指針有MAX_PATHS。在被調用的函數中,它不知道,所以它不知道有多少條向你展示。如果您手動爲其他人提問,它會向您顯示。

這只是這樣的:

void someFunc(int *j) 
{ 
    // does j point to a single integer? An array? Who knows? 
} 

void foo(void) 
{ 
    int p = 3; 
    int* j = &p; 
    // here we know j points to one integer 
    someFunc(j); 
} 

void foo2(void) 
{ 
    int* j[4]; 
    // here we know j is an array of four pointers 
    someFunc(j); 
} 
1

*dir相同pathvc[0],它僅在陣列的第一個元素。 **dir不是pathvc[1]它是pathvc[0][0]。改爲使用*(dir + 1)dir[1]