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

C 語言字符串拼接陷阱:strcat 緩衝區溢出風險與安全替代方案

     編輯:程式設計疑難解答

危險代碼示例

char greeting[10] = "hello ";
char name[100] = "aaaaaaaaaaaaaaaa";
strcat(greeting, name); // 緩衝區溢出
printf("%s", greeting);

為什麼有時不報錯?

未定義行為(UB):溢出可能覆蓋相鄰變量、返回地址或無關內存區域。若覆蓋區域暫時未被使用,程序看似正常運行,實則埋下隱患(「闖紅燈不一定每次出事故」)。

安全替代方案

  1. strncat:指定最大追加字符數,確保目標緩衝區不溢出。
    strncat(greeting, name, sizeof(greeting) - strlen(greeting) - 1);
  2. snprintf:格式化輸出並限制總長度,更靈活。
    snprintf(greeting, sizeof(greeting), "%s%s", "hello ", name);
  3. 動態分配:根據實際長度 malloc,拼接後再 free。

最佳實踐

嚴禁使用無長度限制的字符串操作函數(strcpy, strcat, sprintf, gets),統一改用 strncpy, strncat, snprintf, fgets 等安全版本。

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