C++ アプリケーションでコマンド ライン引数を処理するために getopt_long を使用しています。例はすべてprintf("Username: %s\n", optarg)
、処理例のようなものを示しています。これは例を示すのに最適ですが、後で使用するために値を実際に保存できるようにしたいと考えています。コードの残りの部分の多くはstring
代わりにオブジェクトを使用しchar*
ているため、optarg の内容を文字列にキャスト/コピー/何でもする必要があります。
string bar;
while(1) {
c = getopt_long (argc, argv, "s:U:", long_options, &option_index);
if (c == -1) break;
switch(c)
{
case 'U':
// What do I need to do here to get
// the value of optarg into the string
// object bar?
bar.assign(optarg);
break;
}
}
上記のコードはコンパイルされますが、実行時にIllegal instruction
printf を使用して bar の値を出力しようとするとエラーが発生します (cout では問題なく動作するようです)。
// Runs just fine, although I'm not certain it is actually safe!
cout << " bar: " << bar << "\n";
// 'Illegal instruction'
printf(" bar: %s\n", bar);
私はコマンドラインのデバッグについて十分な知識がなく、不正な命令が何であるかをより深く掘り下げることができません。私は valgrind を実行していましたが、このエラーが原因で大量のメモリ エラーが発生したため、このエラーの原因を正確に特定することが困難でした。