#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 — Иногда это действительно случается и со мной 🙂