1

アイデアは、「人間の」方法でエスケープ シーケンスを作成しようとすることです。たとえば、 と の 2 つの文字を使用して を作成し'\n'ます。 私が考えているのは、文字を 変更して、エスケープ シーケンスとして使用できるようにすることです。'\''n'
char array[3]={'\\','n','\0'};
'n'

printf(array)が今印刷すると:

\n

次の行に移動したいと思います。

たとえば
、ループでエスケープ シーケンスとして使用されたときに、アルファベットのすべての文字が何をするかを手動で確認したい場合はどうすればよいでしょうか。

for(char='a';char<='z';char++) 
{
  /* create escape sequence with that letter */
  /* print that escape sequence and see what it does */
}

それは課題ではなく、実用的な用途はありませんが(少なくともまだ)、どこにも答えが見つからない、または自分で理解できないという理論的な質問です。

4

2 に答える 2

2

エスケープ シーケンスは1 文字を表し、コンパイル時 に評価されます。実行時にリテラル文字列をエスケープ シーケンスとして解釈することはできません。たとえば、'\n' は改行 (または改行文字 - ASCII の 0x0A) です。

ご了承ください:

char array[3]={'\\','n','\0'};

次と同等です。

 char array[3] = "\\n" ;

printf(array)印刷するときはおそらく驚くこと\nではありません。

未定義のエスケープ シーケンスは単純にコンパイルされないため、単純に次のようにします。

char = '\a' ;
char = '\b' ;
... // etc.

コンパイラがボークする行を確認します。ただし、一部のエスケープ シーケンスにはオペランドが必要なため、これは完全な話ではありません。たとえば\x、それ自体では意味がありません\xabが、0xab (10 進数の 171) で表される文字です。他のものは文字でさえありません。ほとんどは空白に関連しており、その影響は実行プラットフォームの端末またはコンソールの機能に依存する場合があります。したがって、単純な調査では、言語のセマンティクスやプラットフォームの機能が考慮されていないため、求めている結果が得られない場合があります。

サポートされているすべてのエスケープ シーケンスは、実際には明確に定義されています。おそらく、プラットフォームの機能に関連するものを除いて、驚くことはほとんどありません (たとえば、ターゲットにビープ音を生成する手段がない場合、\a は有用な効果がありません)。

    \ビープ音
    \b バックスペース
    \f 改ページ
    \n 改行
    \r キャリッジ リターン
    \t 水平タブ
    \v 垂直タブ
    \\ バックスラッシュ
    \' 一重引用符
    \" 二重引用符
    \0 ASCII 0x00 (ヌル ターミネータ)
    \ooo 8 進数表現
    \xdd 16 進表現
于 2013-10-20T14:27:57.583 に答える
0

独自の printf() を作成するのはどうですか? '\' の後に 'n' が続くかどうかを確認し、char[0] から '\''n' への出力のみを確認できる場所。最後に "printf("\n"); を追加します。

製造

于 2013-10-20T13:50:02.300 に答える