Печать массива u_chars - PullRequest
1 голос
/ 10 декабря 2010

У меня есть массив u_chars, и я хочу напечатать его с помощью printf. Я не знаю размер массива:

u_char *ip_p;
printf("%s", ip_p); // EXC_BAD_ACCESS D:<

Я хочу напечатать это. Как я могу это сделать?

Ответы [ 4 ]

6 голосов
/ 10 декабря 2010

Этого нельзя сделать. Указатель волшебным образом не содержит информацию о размере данных, на которые указывают.

Если нет соглашения (терминаторный байт или длина, закодированная где-то), вы не можете знать, сколько данных является действительным и, следовательно, сколько печатать.

1 голос
/ 10 декабря 2010

Если вы не знаете размер, как вы ожидаете printf знать? Исправьте ваш код, чтобы передать размер в качестве дополнительного аргумента. Тогда вы можете использовать:

printf("%.*s", size, buf);

Однако, похоже, ваши данные могут быть не текстовыми, а двоичными. Если это так, я подвергаю сомнению ценность печати этого с printf ...

0 голосов
/ 10 декабря 2010

Если вы не знаете размер данных, как вы можете надеяться использовать их? Размер должен был быть доступен где-нибудь, иначе как он туда попал !? Вы должны либо знать размер, либо иметь значение дозорного, например, нулевой символ.

Если оно не завершено, то "% s" является неподходящим спецификатором формата. Также, если значения u_char не все печатаемые символы, вы не должны использовать% s или даже% c. Вы можете использовать% c и заменить непечатаемые символы другими.

0 голосов
/ 10 декабря 2010

Если ip_p имеет значение NUL, ваш код работает.Просматривая комментарий в вашем фрагменте кода, я бы сказал, что он не завершен ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...