弊社次のコードを持っている:printf引数に関する質問。 C/C++
char tab[2][3] = {'1', '2', '\0', '3', '4', '\0'};
printf("%s\n", tab);
そして、我々は
私は警告を受け取りますが、エラーは発生せず、プログラムはうまく動作します。 'printf
への呼び出しでエラー/警告を取得しない理由を私は理解していません。
12
'と印刷されます。
printf
は、タイプchar *
の引数、つまりchar
へのポインタを想定しています。だから私がchar arr[3]
と宣言した場合、arr
はchar
を含むメモリユニットのアドレスなので、printf
を呼び出すと、へのポインタへのポインタ、つまりchar *
になります。
同様に、tab
3チャーの順番にあるの種類アレイを含むメモリユニットのアドレスであり、メモリユニットのアドレスがchar
が含まれ、これtab
はchar **
に減衰し、それが問題であるべきで、以来printf
はchar *
と予想しています。
誰かがこの問題について説明できますか?
補遺:
私が手に警告がある:
a.c:6: warning: char format, different type arg (arg 2)
以下、あなたはそれがうまくいっていると言いますが、ここではあなたは「エラー/警告」を得ると述べています。何を正確に得ますか?このエラーが発生しやすいコードで警告が表示されるのは論理的ですが、エラーが発生しますか? –
私は追加され、修正されました。 –