thl*_*ood 14 c gdb pointers program-entry-point arguments
这是我的 main.c
......
int main(int argc, char **argv)
{
init_arg(&argc, &argv);
......
}
Run Code Online (Sandbox Code Playgroud)
这是我的 init_arg.c
......
void init_arg(int *argc, char ***argv)
{
printf("%s\n", *argv[1]);
......
}
Run Code Online (Sandbox Code Playgroud)
我编译它没有错误和警告.
我跑了:
./a.out include
它会出现Segmentation故障
当我调试它时,我发现了一步 printf("%s\n", *argv[1]);
弄错了,它显示:
print *argv[1]
Cannot access memory at address 0x300402bfd
我想知道,如何打印argv[1]的init_arg()功能.
das*_*ght 19
您需要在(*argv)周围添加一对括号来更改评估顺序.你当前的方式,首先评估[1],产生一个无效的指针,然后取消引用,导致未定义的行为.
printf("%s\n", (*argv)[1]);
Run Code Online (Sandbox Code Playgroud)
alf*_*alf 13
Argv已经是一个指针.就像这样传递它:
init_arg(&argc, argv);
Run Code Online (Sandbox Code Playgroud)
而init_arg应如下所示:
void init_arg(int *argc, char **argv) {
printf("%s\n", argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |