u_char (*) [10] & char (*) [10] спецификаторы формата в C - PullRequest
2 голосов
/ 24 марта 2012

Я должен исправить существующий файл C, в котором есть ошибки компиляции спецификаторов формата. Может кто-нибудь сказать правильные спецификаторы формата для следующих случаев:

  1. u_char(*) [10] (я пробовал% s, но не работал)

  2. char(*) [10] (я пробовал% s и% c, но не работал)

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 марта 2012

Оба являются указателями на массивы, поэтому вы можете разыменовать их, чтобы они стали массивами, которые распадаются на указатели на первый элемент:

char arr[10];

char (*pa)[10] = &arr;
printf("%s", *pa);   // or &((*pa)[0])

Чтобы объяснить это: тип pa равен char(*)[10], а тип *pa равен char[10], и последний уменьшается до char* значения &((*pa)[0]) (равного &(arr[0])).

0 голосов
/ 25 марта 2012

Я согласен с Керреком, но я думаю

printf ("%s", *pa);

может не работать как есть, так как мы не уверены, есть ли в конце символ NULL. Таким образом, для печати мы можем сделать следующее

char temp[10+1];
memcpy(temp, *pa, 10);
temp[10] = '\0';
printf("%s",temp);
...