argv的混淆

问题描述 投票:2回答:2

我有这个小程序:

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {
   printf("argv[1] -> %s\n", argv[1]); 
}

我在gdb中使用以下命令进行了分析:

$ gdb -q  --args foo hello
Reading symbols from foo...
(gdb) break main
Breakpoint 1 at 0x1148: file foo.c, line 5.
(gdb) run
Starting program: /tmp/foo/foo hello

Breakpoint 1, main (argc=2, argv=0x7fffffffea68) at foo.c:5
5          printf("argv[1] -> %s\n", argv[1]);
(gdb) print argv@2
$1 = {0x7fffffffea68, 0x200000000}
(gdb) print *argv@2
$2 = {0x7fffffffecd8 "/tmp/foo/foo", 0x7fffffffece5 "hello"}

我不明白当argv[1]的内容为"hello"而不是argv[1],它是字符串0x200000000的实际地址。

c argv
2个回答
0
投票

0x7fffffffece5不执行您认为的操作。似乎没有打印"hello"print argv@2,而是打印了argv[0]argv[1]


0
投票

我在(&argv)[1]中使用了检查命令,现在一切都有意义了:

© www.soinside.com 2019 - 2024. All rights reserved.