あなたは自分でそのマッピングをしなければなりません。あなたが望むなら、それはです。Cでは、文字列はnullで終了します。printf
したがって、またはなどのフォーマットされた出力関数を使用してputs
、(フォーマット指定子を介して)文字列を出力するように要求すると、最初のnullに達するとすぐに%s
印刷が停止します。Cには単語str
がありません。文字数が正確にわかっている場合は、それらをループして、選択したニーモニックに置き換えて、文字を個別に印刷することもできます。null
str
0
ドラフトには7.21.6.1/8と書かれています:
p引数は、voidへのポインタでなければなりません。ポインタの値は、実装で定義された方法で、一連の印刷文字に変換されます。
ただし、次のとおりです。
$ cat null.c
#include <stdio.h>
int main() {
printf("%p\n", (void *)0);
}
生成:
00000000
gcc4.6とclang3.2の両方で。
ただし、深く掘り下げると:
$ cat null.c
#include <stdio.h>
int main() {
printf("%s\n", (void *)0);
}
確かに望ましい出力を生成します:
(null)
gccとclangの両方で。
標準ではこれが義務付けられていないことに注意してください。
■ l長さ修飾子が存在しない場合、引数は文字タイプの配列の最初の要素へのポインタでなければなりません。280)配列の文字は、終了するヌル文字まで書き込まれます(ただし、含まれません)。精度が指定されている場合、書き込まれるバイト数はそれ以下です。精度が指定されていないか、配列のサイズより大きい場合、配列にはヌル文字が含まれている必要があります。
この動作に依存すると、驚きにつながる可能性があります。