char a[] = ">+"; // 僅 3 字元(含結束符)
char t[100];
for(i=0;i<l-2;i++) t[i]='-';
t[i]='\0';
char *temp;
temp = strcat(a, t); // 向 a 寫入,超出其分配空間
temp = strcat(temp, b);
`char a[] = ">+";` 在棧上分配**僅夠存放 ">+" 及 `\0` 的空間(3 bytes)**。`strcat(a, t)` 將 `t` 的內容追加到 `a` 末尾,導致**緩衝區溢位**,覆蓋鄰近記憶體,引發未定義行為(運行時錯誤、數據損壞)。
給足夠大小的緩衝區:
char a[256] = ">+"; // 或動態分配
// 後續 strcat 安全
或使用 `snprintf` 格式化輸出至足夠大的緩衝區,避免多次 `strcat`。
輸入:
1
4
3 4
4 5
5 6
6 7
修正後程式可正常輸出預期圖案。