これは、言語が 8 進数のエスケープ シーケンスを定義する方法にすぎません。
文字定数または文字列リテラルの一部である 8 進エスケープ シーケンスは、 の\
後に 1、2、または 3 桁の 8 進数字 ( '0'
.. '7'
) が続きます。
では"\07777"
、円記号の後に 3 つの 8 進数 (0、7、7) が続きます。これは、077
8 進数または 10 進数の値を持つ文字を表し63
ます。ASCII または ASCII から派生したエンコーディングでは、疑問符になり'?'
ます。
'?'
したがって、リテラルは、「7」、「7」で構成される長さ 3 の文字列を表します。
しかし、あなたの質問にはタイプミスがあるはずです。プログラムを実行すると、次のような出力が得られます。
63 55 55
--?-- --7-- --7--
の宣言をに変更するp
と
char *p = "\0777";
あなたが説明した出力が得られます。最後----
は実際には 2 つのハイフンであり、その後にヌル文字が続き、その後に 2 つのハイフンが続くことに注意してください。Unix ライクなシステムを使用している場合は、プログラムの出力をcat -v
またはでパイプしてみてくださいcat -A
。
コードを投稿するときは、再入力するのではなく、コピー アンド ペーストすることが非常に重要です。
(そして、上部に がありません#include <stdio.h>
。)