strncpy()schützt angeblich vor Pufferüberläufen. Wenn jedoch ein Überlauf ohne Nullbeendigung verhindert wird, wird aller Wahrscheinlichkeit nach eine nachfolgende Zeichenfolgenoperation überlaufen. Um mich davor zu schützen, mache ich Folgendes:
strncpy( dest, src, LEN );
dest[LEN - 1] = '\0';
man strncpy gibt:
Die
strncpy()Funktion ist ähnlich, außer dass nicht mehr alsnBytes vonsrckopiert werden. Wenn also kein Nullbyte unter den erstennBytes von vorhanden istsrc, wird das Ergebnis nicht nullterminiert.
Ohne null etwas scheinbar Unschuldiges zu beenden wie:
printf( "FOO: %s\n", dest );
... könnte abstürzen.
Gibt es bessere und sicherere Alternativen zu strncpy()?
extern char *strncpy(char * restrict s1, const char * restrict s2, size_t n);') steht: Die Funktion strncpy () kopiert höchstens n Zeichen von s2 nach s1. Wenn s2 weniger als n Zeichen lang ist, wird der Rest von s1 mit "\ 0" Zeichen gefüllt. Andernfalls wird s1 nicht beendet.