我有以下的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
'command.argv'似乎是單元化的。如果'lookup()'從指針數組中讀取,這將是未定義的行爲。 – hmjd
@hmjd我們甚至不關心command.argv這裏。順便說一下,代碼是正確實現的,這裏給出的只是原型。 – Rafay
@Spoilt,好的。我只能對發佈的代碼發表評論。我認爲相同數據結構的內容不匹配。取消引用未初始化的指針是未定義的行爲。我提到這可能是一個促成因素。 – hmjd