首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言手寫 strcat 字串連接:尋找末尾追加、重疊風險、標準庫替代

     編輯:關於C

標準 strcat 語義

將 src 追加到 dest 末尾 (覆蓋 dest 的 \0),回傳 dest。dest 必須有足夠空間。

手寫實作

char *my_strcat(char *dest, const char *src) {
    char *ret = dest;
    while (*dest) dest++; // 移至 \0
    while ((*dest++ = *src++)) ; // 複製含 \0
    return ret;
}

致命缺陷:不支援重疊

char s[] = "1234567";
my_strcat(s+3, s); // 嘗試將 "1234567" 追加到 "4567" 後
// 行為未定義:讀取與寫入同一緩衝區,且 src 隨 dest 增長而增長 → 無限循環/崩潰

標準庫 strcat 同樣不保證重疊安全,文檔明確要求不重疊。

安全替代

  • strncat(dest, src, n):限制追加長度,保證 \0 結尾。
  • snprintf(dest, size, "%s%s", dest, src):格式化輸出自動處理長度。
  • 手寫帶長度檢查版:
    char *safe_strcat(char *dest, size_t dest_size, const char *src) {
        size_t len = strlen(dest);
        if (len >= dest_size) return dest;
        return strncat(dest, src, dest_size - len - 1);
    }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved