Мы имеем следующий фрагмент кода:Вопрос о параметрах 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)
Ниже вы говорите, что это работает, но здесь вы заявляете, что получаете сообщение «ошибка/предупреждение». Что вы получаете точно? Логично, что вы получаете предупреждение с этим кодом, подверженным ошибкам, но получаете ли вы ошибку? –
Я добавил и исправил. –