Существует также это ... :)
char S[16]="";
strncpy(S,"Zoodlewurdle...",sizeof(S)-1);
Испытание, что происходит, если вы объявите S [8] или S [32], чтобы понять, почему это так эффективно.
Я написал свои собственные строковые функции, основанные на логике strbcpy OpenBSD, направленные на то, чтобы гарантировать, что байт терминатора ДОЛЖЕН существовать в случае переполнения, а стандартная strncpy не сделает этого, поэтому вам нужно внимательно следить за тем, как вы его используете ,
Описанные выше метод является эффективным, поскольку =""
в декларации обеспечивает 0 байт во всем, и sizeof(S)-1
гарантирует, что если вы переборщите цитируемую строку, переданную в strncpy, вы получаете усечения и без нарушения последних 0 байт, так что это безопасно против переполнение, а также доступ к строке позже. Я нацелил это на ANSI C, поэтому он должен быть в безопасности.
Смотрите здесь для некоторых идей: Http: // StackOverflow.com/questions/1223736/c-change-all-values-of-the-array-of-structure-in-one-line/1223806 # 1223806 –