首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言字串拼接緩衝區溢位導致運行時錯誤

     編輯:程式設計疑難解答

錯誤代碼片段

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

修正後程式可正常輸出預期圖案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved