2

コマンドライン引数を使用するC言語でプログラムを作成したところ、最初の引数を出力しようとしました。次のコマンドでプログラムを実行すると

./a.out $23

以下のコードを使用して最初の引数を出力してみてください

printf("%s", argv[1]);

出力はちょうど

3

いくつかの特殊文字が存在する場合、コマンドライン引数の扱いが異なるということです。誰かがこの振る舞いを説明できますか?

4

4 に答える 4

5

$キャラクターをエスケープする必要があります。

これを試して:

./a.out \$23
于 2012-08-29T15:55:46.477 に答える
4

おそらく、$2はシェル変数として扱われています。ドル記号をエスケープしてみてください。

./a.out \$23
于 2012-08-29T15:56:22.280 に答える
3

次のように引数を「禁止」する必要があります。

./a.out \$23

一部の文字は、シェルによって解釈されます。これらの文字には次のものがあります。

  • \そのすぐ後ろの文字を禁止(エスケープ)します(スペース、タブ、またはあなたの場合に役立ちます)
  • *単一の文字または文字列を表す
  • $これは変数を表します(あなたの場合、シェルは文字列「$23」ではなく、変数 $23 を理解します)
  • ||または|、コマンドの解決を許可するか、コマンドをパイプする
  • &&&コマンドの組み合わせを許可するか、ジョブ制御を使用できるか
  • "これにより、シェルは文字列を区切ることができます
  • 'これにより、シェルは特殊文字を含む文字列を解釈できなくなります
  • ;コマンドを区切るもの
  • ` これらのうちの 2 つで囲まれたコマンドを解釈し、コマンドの出力を返します。
于 2012-08-29T16:23:48.747 に答える
1

シェルは$23、位置パラメータ$2の後にリテラル文字3が続くものとして扱います。文字列「$ 23」を渡すには、次のいずれかを実行します。

./a.out \$23

また

./a.out '$23'

シェルの23番目の位置パラメーターを渡すには(可能性は低いですが可能です)、次のように記述します。

./a.out ${23}
于 2012-08-29T16:15:51.963 に答える