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

C 語言字符串拼接的三種核心實現:庫函數、數組循環、指針操作

     編輯:關於C語言

C 語言字符串拼接的三種核心實現:庫函數、數組循環、指針操作

字符串拼接是基礎操作,標準庫提供 strcat,但理解其底層邏輯、掌握無庫函數環境下的手寫實現,對嵌入式、面試、底層庫開發至關重要。

方法一:標準庫 strcat(最簡潔)

#include 
char str1[20] = "Hello ";
char str2[20] = "World!";
puts(strcat(str1, str2)); // 輸出: Hello World!

注意:目標緩衝區必須足夠大,否則緩衝區溢出。

方法二:二維數組循環拷貝(無庫函數、教學常用)

char dest[61], str[3][21];
scanf("%s%s%s", str[0], str[1], str[2]); // 讀入三串
int k = 0;
for (int i=0; i<3; i++)
    for (int j=0; j<20; j++) {
        if (str[i][j] == '\0') break;
        dest[k++] = str[i][j];
    }
dest[k] = '\0';
printf("%s", dest);

邏輯:外層遍歷源字符串,內層逐字符拷貝直到 \0,最後補終止符。

方法三:指針走位拷貝(最高效、最貼近機器)

char str1[80], str2[30], *p1=str1, *p2=str2;
gets(str1); gets(str2);
while(*p1) p1++;              // p1 移至 str1 末尾 \0 處
while(*p2) *p1++ = *p2++;     // 逐字符拷貝 str2 到 str1 尾部
*p1 = '\0';                   // 補終止符
printf("%s", str1);

優勢:無索引變量、無邊界檢查開銷、單遍歷完成。前提:str1 有足夠空間容納拼接結果。

效能與適用場景對比

方法可讀性效能適用場景
strcat★★★★★★★★☆☆通用應用、快速開發
數組循環★★★☆☆★★☆☆☆教學、受限環境、需自定義邏輯(如去重、過濾)
指針操作★★★★☆★★★★★嵌入式、高性能庫、字符串處理框架底層

安全增強建議

  • 使用 strncat 或手寫帶長度檢查版本:size_t len = strlen(dest); if (len + strlen(src) < SIZE) strcat(dest, src);
  • C11 strcat_s、strncat_s 提供邊界檢查運行時約束。
  • 現代 C++ 應優先用 std::string、std::string_view、fmt::format。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved