argDescrip
文字列が十分に長くない場合、popt がセグメンテーション違反になるのはなぜですか?
次の例を見てください。
#include <popt.h>
struct poptOption options[] = {
POPT_AUTOHELP
{
.longName = "color",
.shortName = '\0',
.argInfo = POPT_ARG_STRING
| POPT_ARGFLAG_OPTIONAL
| POPT_ARGFLAG_SHOW_DEFAULT,
.arg = (void*) "auto",
.val = 1,
.descrip = "Whether or not to use colored output",
.argDescrip = "always|never|auto (checks if TTY)"
},
POPT_TABLEEND
};
int main(int argc, const char** argv) {
// get popt context
poptContext ctx = poptGetContext(
"program",
argc, argv,
options,
POPT_CONTEXT_POSIXMEHARDER);
// parse
poptGetNextOpt(ctx);
return 0;
}
上記のセグメンテーション違反:
/tmp$ ./a.out --help
Usage: a.out [OPTION...]
[1] 47468 segmentation fault ./a.out --help
に変わります.argDescrip
が、
.argDescrip = "always|never|auto (checks if TTY) "
"........................................."
popt は喜んでそれを受け入れ、出力を表示します。
/tmp$ ./a.out --help
Usage: a.out [OPTION...]
--color[=always|never|auto (checks if TTY) .........................................] Whether or not to use colored output
Help options:
-?, --help
Show this help message
--usage
Display brief usage message
何を与える?C仕様に何か欠けていますか? poptのman ページでは、必要な長さが指定されていません。これはバグですか?