これは、言語が 8 進数のエスケープ シーケンスを定義する方法にすぎません。
文字定数または文字列リテラルの一部である 8 進エスケープ シーケンスは、 の\後に 1、2、または 3 桁の 8 進数字 ( '0'.. '7') が続きます。
では"\07777"、円記号の後に 3 つの 8 進数 (0、7、7) が続きます。これは、0778 進数または 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>。)