void func(char *s1, char *s2) {
char d[32];
strncpy(d, s1, sizeof d - 1);
strncat(d, s2, sizeof d - 1);
...
}
雖然使用了長度限制的 strncpy/strncat,但第二次呼叫時緩衝區剩餘空間已被第一次佔用。strncat 的第三參數是「目的緩衝區剩餘空間」,而非「來源長度」。此處傳入完整緩衝區大小導致溢位。經典緩衝區溢出錯誤。
strncpy/strncat 回傳值為目的指標,無法指示是否截斷。strcpy_s/strcat_s (C11) 或安全庫函式。發現此錯誤 +1 分。