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

C庫函數實作:手把手教你寫 strcat 字串連接

     編輯:關於C

strcat 核心邏輯

strcat(char *dest, const char *src) 將 src 字串附加到 dest 末尾,返回 dest。關鍵步驟:

  1. 找到 dest 字串結尾(\0 位置)。
  2. 從該位置開始逐字元複製 src,包含結尾 \0。
  3. 返回原始 dest 指標。

標準實作範例

#include 
#include 

char *my_strcat(char *dest, const char *src) {
    assert(dest != NULL && src != NULL);  // 防禦性程式設計

    char *original_dest = dest;           // 保存返回值

    // 1. 移動到 dest 字串末尾
    while (*dest != '\0') {
        dest++;
    }

    // 2. 複製 src(含結尾 \0)
    // *dest++ = *src++ 利用賦值運算式返回值特性:
    // 先賦值,再遞增指標,當複製到 '\0' 時運算式值為 0,循環結束
    while ((*dest++ = *src++) != '\0') {
        ;  // 空主體
    }

    return original_dest;
}

測試主程式

#include 

int main(void) {
    char buffer[100] = "Hello, ";
    const char *suffix = "World!";

    printf("Before: %s\n", buffer);
    my_strcat(buffer, suffix);
    printf("After : %s\n", buffer);

    return 0;
}

關鍵細節解析

細節說明
斷言開發期捕捉空指標,發布版可透過 NDEBUG 關閉
保存原始指標dest 會在循環中移動,必須另存以便返回
*dest++ = *src++經典 C 慣用語,緊湊高效,複製包含結尾的 \0
無長度檢查標準 strcat 不檢查緩衝區溢位,使用者需自行確保 dest 足夠大;實務上建議使用 strncat 或 strlcat

安全版本:strncat

char *my_strncat(char *dest, const char *src, size_t n) {
    assert(dest && src);
    char *orig = dest;
    while (*dest) dest++;
    while (n-- && (*dest++ = *src++)) ;
    *dest = '\0';  // 確保以 null 結尾
    return orig;
}

總結

理解 strcat 實作有助於掌握 C 字串操作精髓:指標運算、空字元終結慣例、以及「呼叫端負責緩衝區大小」的契約式設計。實際專案中優先使用長度受限版本(strncat、strlcat)或現代安全庫(如 strcat_s),杜絕緩衝區溢位風險。

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