Есть еще такая ... :)
char S[16]="";
strncpy(S,"Zoodlewurdle...",sizeof(S)-1);
Проверьте, что произойдет, если вы объявите S [8] или S [32], чтобы понять, почему это так эффективно.
Я написал свои собственные строковые функции, основанные на логике strlcpy OpenBSD, направленные на обеспечение того, чтобы байт терминатора ДОЛЖЕН существовать в случае переполнения, а стандартный strncpy не будет этого делать, поэтому вы должны внимательно следить за тем, как вы его используете.
Вышеупомянутый метод эффективен, потому что объявление =""
at гарантирует 0 байтов повсюду, а sizeof(S)-1
гарантирует, что если вы переборщите со строкой в кавычках, переданной в strncpy, вы получите усечение и отсутствие нарушения последнего 0 байта, поэтому теперь это безопасно от переполнения, И при доступе к строке позже. Я нацелил это на ANSI C, поэтому он должен быть безопасным где угодно.
person
Lostgallifreyan
schedule
17.03.2012