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 alsn
Bytes vonsrc
kopiert werden. Wenn also kein Nullbyte unter den erstenn
Bytes 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.