Я новичок в getopt(3)
, посмотрел несколько примеров и наткнулся на этот .
Эти строки
case 'c':
cvalue = optarg;
break;
мне показалось странным, потому что содержимое optarg не копируется в cvalue
, они просто копируют указатель. Но это работает:
$ testopt -a -b -c foo
aflag = 1, bflag = 1, cvalue = foo
Я ожидал, что optarg
будет перезаписан вторым вызовом getopt()
, поэтому я написал свою собственную программу на основе примера. Удивительно, но optarg
не перезаписывается.
$ testopt -p -f me -t you
pflag = 1, from = me, to = you
Работает ли это последовательно или я всегда должен копировать / дублировать?
Должен ли я позаботиться о free()
всё, что вернулось в optarg
?
Мне просто везет, а realloc()
из optarg
не присваивается одному и тому же адресу?