char greeting[10] = "hello ";
char name[100] = "aaaaaaaaaaaaaaaa";
strcat(greeting, name); // 緩衝區溢出
printf("%s", greeting);未定義行為(UB):溢出可能覆蓋相鄰變量、返回地址或無關內存區域。若覆蓋區域暫時未被使用,程序看似正常運行,實則埋下隱患(「闖紅燈不一定每次出事故」)。
strncat:指定最大追加字符數,確保目標緩衝區不溢出。strncat(greeting, name, sizeof(greeting) - strlen(greeting) - 1);snprintf:格式化輸出並限制總長度,更靈活。snprintf(greeting, sizeof(greeting), "%s%s", "hello ", name);malloc,拼接後再 free。嚴禁使用無長度限制的字符串操作函數(strcpy, strcat, sprintf, gets),統一改用 strncpy, strncat, snprintf, fgets 等安全版本。