最近の C 標準では、次のように指定されていますprintf("%s",p)。
l長さ修飾子が存在しない場合、引数は文字型の配列の最初の要素へのポインタでなければなりません
pそれは と互換性がなければならないということですかchar *、それともこの文はより寛大な方法で解釈されるべきですか? 標準の他の部分は、ここで「文字型の配列」が正確に何を意味するのかを明確にしていますか?
これが重要な理由p: 句がと互換性がなければならない意味として厳密に解釈される場合char *、重要な結果は、が署名unsigned char *p; … printf("%s", p);されているコンパイル プラットフォームでは未定義であり、未定義です。charconst char *p; … printf("%s", p);