我有以下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
}
这是我在main函数中获得的调试信息:
名称: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 / games”,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”
姓名:**目录详情:47'/'
为什么我传递一个指向查找函数的指针数组,它接受它作为双指针,但它只指向第一个路径而不是完整的路径列表。
请原谅我,如果我正在做/问一个非常愚蠢的问题,因为我对C中的指针感到不舒服。
答案 0 :(得分: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 :(得分:1)
*dir
与pathvc[0]
相同,它只是数组的第一个元素。 **dir
不是pathvc[1]
pathvc[0][0]
。请改用*(dir + 1)
或dir[1]
。