2016-09-14 3 views
-1

私は根本的な原因がどのようにCコンパイラが文字列を処理するのか知っています。しかし、誰が正確にこれらの文字が受け入れられているか教えていただけますか?そして、私たちはコマンドライン経由でそれらを渡すことができます( '\'を追加すると、システムはそれを受け入れることができますが、どうすれば*または<またはそれをそのまま渡すことができますか?gccコンパイラを使用しています。なぜ、*、<,>をCのコマンドライン引数で渡すことができないのですか?バックグラウンドで何が起こっていますか?

+0

はあなたがスペースで区切られた値が同じ 'ARGV []'使用は再び引用し、例えば 'MYPROG「で全てになりたい同様にあれば、' ">" 'MYPROGを試してみてください1 2 3 "' –

+0

@WeatherVane '\'や引用符なしで渡すことができる方法はありますか?それは私が探しているものです。 –

+0

発見したように、引数がプログラムに到達する前に引用符が削除されていません。 –

答えて

2

これはあなたのCプログラムとは何の関係もありません。問題は、彼らもあなたのプログラムに到達する前に*<>は特殊文字シェルプロセスであるということです。あなたは、単一で、あなたの入力を引用して、シェルからそれらを保護することができ引用符(')例:。。

$ ./myprogram arg1 arg2 'arg3<>*' 
+0

私はこれを回避することができます*、<,>引用符で? *ユーザーからの入力として*を受け入れる場合はどうしますか?私はそれを実装する方法はありますか? –

+0

ユーザから直接入力を受け取っている場合(例えば、 'scanf'を使って)、あなたはすでにあなたのプログラムに入っています。シェルではないので、問題はありません。引用符のポイントは、シェルがあなたのプログラムにargvとして渡す前にそれらを解釈するのを防ぐことです。 – Mureinik

+0

ユーザーはこのプログラムを実行し、コマンドライン経由で引数を渡すことになっています。 *は、ユーザーが渡したオプションの一部です。 –

関連する問題