GDB: Почему я не могу распечатать это?

#gdb #debugging

#gdb #отладка

Вопрос:

 (gdb) print argv[1]
$5 = 0xbffffb1d "hello"
(gdb) step
21     sz = strlen(argv[1])   1;
(gdb) print sz
$6 = 0
(gdb) printf "%s", sz
Cannot access memory at address 0x0
(gdb) printf "%i", sz
0
  

Я ожидаю 4 в sz , почему это выходит как 0 ?

Комментарии:

1. Я думаю, что вы останавливаетесь на 21 строке, и инструкция не выполняется. И в этот момент sz равно 0 , что и является тем, что вы печатаете. Введите n после достижения 21 строки, а затем посмотрите, что sz получилось.

Ответ №1:

Я не уверен, чего вы ожидаете 4 . Вы получаете 5 from strlen(argv[1]) , потому что hello содержит 5 символов. И затем вы добавляете 1 к нему, поэтому ответ — 6.

 sz = strlen(argv[1])   1; // 5   1 = 6
  

Комментарии:

1. Нет, hello содержит 5 символов явно. является просто завершающим символом и не учитывается как часть strlen. strlen считается до достижения.

2. @Doug — Иногда это действительно случается и со мной 🙂