Ваш аргумент "безопасности" на самом деле не верен. Если вы не доверяете пользователю вручать вам строку с нулевым символом в конце, когда это то, что вы задокументировали (и что является «нормой» для простого C), вы не можете доверять длине, которую они вам дают (которую они вероятно, используйте, strlen
как вы делаете, если у них нет этого под рукой, и что не получится, если «строка» изначально не была строкой).
Однако существуют веские причины требовать длину: если вы хотите, чтобы ваши функции работали с подстроками, возможно, намного проще (и эффективнее) передать длину, чем заставить пользователя выполнить какое-либо копирование назад и вперед, чтобы получить нулевой байт. в правильном месте (и рискуйте ошибками по пути).
Возможность обрабатывать кодировки, в которых нулевые байты не являются окончаниями, или возможность обрабатывать строки, которые имеют встроенные нулевые значения (специально), может быть полезна в некоторых обстоятельствах (зависит от того, что именно выполняют ваши функции).
Возможность обрабатывать ненулевые данные (массивы фиксированной длины) также удобна.
Короче говоря: зависит от того, что вы делаете в своей библиотеке, и какой тип данных вы ожидаете, что ваши пользователи будут обрабатывать.
Там также возможно аспект производительности. Если вашей функции нужно заранее знать длину строки, и вы ожидаете, что ваши пользователи, по крайней мере, обычно уже знают эту информацию, то, что они передадут ее (а не вычислят), это может сократить несколько циклов.
Но если ваша библиотека ожидает обычные простые текстовые строки ASCII и у вас нет мучительных ограничений производительности и очень хорошего понимания того, как ваши пользователи будут взаимодействовать с вашей библиотекой, добавление параметра длины не будет хорошей идеей. Если строка не завершена должным образом, скорее всего, параметр длины будет таким же поддельным. Я не думаю, что вы получите много с этим.
CreateFile
принимаетLPTCSTR lpFileName
параметр в качестве входных данных. Длина строки не ожидается от вызывающей стороны. Фактически, использование NUL-завершенных строк настолько укоренилось, что в документации даже не упоминается, что имя файла должно заканчиваться NUL-символами (но, конечно, это должно быть).