Se da también una ... :)
char S[16]="";
strncpy(S,"Zoodlewurdle...",sizeof(S)-1);
prueba de lo que sucede si se declara S [8] o S [32], para ver por qué esto es tan eficaz.
Escribí mis propias funciones de cadena basadas en la lógica de strlcpy de OpenBSD, destinadas a asegurar que un byte terminador DEBE existir en caso de desbordamiento, y strncpy estándar no hará esto, así que debe observar cuidadosamente cómo lo usa .
El método anterior es eficaz porque el =""
en la declaración asegura 0 bytes en todo, y sizeof(S)-1
asegura que si exagerar la citada cadena pasó a strncpy, se obtiene el truncamiento y ninguna violación del último byte 0, por lo que esta es segura contra desbordamiento ahora, Y al acceder a la cadena más tarde. Apunté esto a ANSI C, por lo que debería estar seguro en cualquier lugar.
Vea aquí algunas ideas: http: // stackoverflow.com/questions/1223736/c-change-all-values-of-a-array-of-structures-in-one-line/1223806 # 1223806 –