コマンドライン引数の謎。引数に、スペース(空白)や、引用符を含める方法。

本文

環境はWinXP。情報元などありません。実験に基づいた記事です。
以下、test.exeは、コマンドラインの第一引数をそのまま表示して終了するプログラムだとします。

int main(int, char *argv[])
{
	puts(argv[1]);
}
実行例1
>test.exe "あ い う え お"
あ い う え お

このように、「"」引用符(クォーテーションマーク)で囲んだ引数は、ひとまとめとして扱われます。
しかもクォーテーションマークは引数に含まれません。

実行例2

コマンドライン引数に「"」引用符(ダブルクォーテーションマーク/ダブルクォート)を含めるには、以下のように。

test.exe "\""
"

つまりおなじみ、「\"」の出番です。

実行例3-1

逆スラッシュ(円マーク/円記号)を含めるには、以下のように

test.exe "\\"
\
実行例3-2

しかし、「\\」を「"」引用符(クォーテーションマーク)で囲まない場合、

test.exe \\
\\

まとめ

「"」(引用符/クォーテーションマーク)で囲った引数は、囲まれた部分全体で一つの引数になる。
なので引数に空白を含みたい場合は、「"」で囲まないといけない。
「"」で囲まれた中では、「"」は「\"」、「\」は「\\」と表現しなければいけない。(でも\tや\nは使えませんでした。)