0

可能重复:
如何在 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/games", 0x0 } 默认值:0xbffff0a8 十进制:3221221544 十六进制:0xbffff0a8 二进制:1011111111111111110121000077770100002777010:

名称: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 时,我得到了这个:

名称:目录详细信息:0xbffff0a8 默认值:0xbffff0a8 十进制:3221221544 十六进制:0xbffff0a8 二进制:10111111111111111111000010101000 八进制:027777770250

名称:*dir 详细信息:0x804c208 "/usr/lib/lightdm/lightdm"

名称:**dir 详细信息:47 '/'

为什么我将一个指针数组传递给查找函数,该函数接受它作为双指针,但它只指向第一个路径而不是完整的路径列表。

如果我正在做/问一个非常愚蠢的问题,请原谅我,因为我对 C 中的指针不满意。

4

2 回答 2

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);
}
于 2012-10-08T14:27:21.030 回答
1

*dir与 相同pathvc[0],它只是数组的第一个元素。**dirpathvc[1]不是pathvc[0][0]。使用*(dir + 1)dir[1]代替。

于 2012-10-08T14:28:05.830 回答