Вы ответили на свой вопрос. Если вы явно дадите массиву длину, как в:
const char hex[16] = "0123456789ABCDEF";
тогда, конечно, он не будет иметь нулевое завершение, потому что нет хранилища, зарезервированного для нулевого завершения. (hex[16]
находится за пределами объекта, и, таким образом, чтение или запись - это неопределенное поведение. Если это читается как 0, это UB для вас ...)
Это только если вы оставите длину неявной, как в:
const char hex[] = "0123456789ABCDEF";
или если вы используете строковый литерал как объект, а не как инициализатор, то он будет иметь нулевое завершение.
Кстати, почему вас волнует, есть ли нулевое завершение или нет, если вы не планируете его использовать. Вы пытаетесь сбрить байты с вашего двоичного файла? : -)