私はgetopt_longを使ってC++アプリケーションでコマンドライン引数を処理しています。これらの例はすべて処理例にprintf("Username: %s\n", optarg)
のようなものを示しています。これは例を示すのに最適ですが、後で使用するために値を実際に格納できるようにしたいと考えています。コードの残りの部分の多くはchar*
の代わりにstring
オブジェクトを使用していますので、optargの内容を文字列にキャスト/コピーする必要があります。optargをC++文字列オブジェクトとして取得
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;
}
}
上記のコードはコンパイルされますが、それは、私はprintfのを使用してバーの値をプリントアウトしようとした場合、私はIllegal instruction
エラーを取得する実行したとき(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を実行していましたが、このエラーの結果として生じる膨大なメモリエラーのため、このエラーの原因を正確に突き止めることが困難でした。
私はこれを覚えておくべき重要なことのリストに入れなければならないと思います。ありがとう! –