Es gibt auch diese ... :)
char S[16]="";
strncpy(S,"Zoodlewurdle...",sizeof(S)-1);
testen, was passiert, wenn Sie S erklären [8] oder S [32], um zu sehen, warum das so effektiv ist.
Ich schrieb meine eigenen String-Funktionen basierend auf der Logik von OpenBSDs strlcpy, um sicherzustellen, dass ein Terminator-Byte im Falle eines Überlaufs existieren muss, und Standard Strncpy wird dies nicht tun, so müssen Sie sorgfältig beobachten, wie Sie es verwenden .
Die oben beschriebene Methode ist effektiv, weil die =""
bei der Deklaration im ganzen 0 Byte gewährleistet und sizeof(S)-1
stellt sicher, dass, wenn Sie die Zeichenfolge in Anführungszeichen übergaben Strncpy übertreiben, Sie Abschneiden und keine Verletzung der letzten 0 Byte bekommen, so ist dies sicher gegen Überlauf jetzt, UND beim späteren Zugriff auf die Zeichenfolge. Ich habe dies auf ANSI C gerichtet, also sollte es überall sicher sein.
Sehen Sie hier einige Ideen: http: // Stackoverflow.com/questions/1223736/c-ändern-alle-Werte-eines-Array-von-Strukturen-in-One-Linie/1223806 # 1223806 –