У меня есть массив u_chars, и я хочу напечатать его с помощью printf. Я не знаю размер массива:Печать массива u_chars
u_char *ip_p;
printf("%s", ip_p); // EXC_BAD_ACCESS D:<
Я хочу напечатать это. Как я могу это сделать?
У меня есть массив u_chars, и я хочу напечатать его с помощью printf. Я не знаю размер массива:Печать массива u_chars
u_char *ip_p;
printf("%s", ip_p); // EXC_BAD_ACCESS D:<
Я хочу напечатать это. Как я могу это сделать?
Это невозможно. Указатель не магически содержит информацию о размере указанных данных.
Если нет соглашения (байт терминатора или длина, закодированная где-то), вы не можете знать, сколько данных действительно, и, следовательно, сколько нужно для печати.
Если ip_p
NUL прекращено, ваш код работает. Глядя на комментарий в фрагменте кода, я бы сказал, что он не завершен ...
Если вы не знаете размер, как вы ожидаете, printf
знать? Исправьте свой код, чтобы передать размер в качестве дополнительного аргумента. Затем вы можете использовать:
printf("%.*s", size, buf);
Однако, похоже, что ваши данные могут быть не текстовыми, а бинарными. Если это так, я задаю вопрос о его печати printf
...
Если вы не знаете размер данных, как вы можете надеяться на его использование? Размер должен был быть где-то в другом месте, как он туда попал !? Вы должны знать размер или иметь значение дозорного, например, нулевой символ.
Если это не nul-terminated, то «% s» является несоответствующим спецификатором формата. Кроме того, если значения u_char не все печатные символы, вы не должны использовать% s или даже% c. Вы можете использовать% c и заменить непечатаемые символы другим.
Вы используете это, если '* ip_p' указывает на блок, который не заканчивается' NULL'. Как «ip_p» указывает на блокировку чтения/получения/etc.? – birryree
Он находится в структуре, которая назначается из необработанных данных. Это действительно не завершено NULL. Но если я не знаю размер массива, как добавить символ NULL? –