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

C 語言字符串拼接:不使用庫函數手動實現 strcat

     編輯:程式設計綜合問答

題目要求

輸入兩個字符串,將它們拼接起來。原始代碼使用 gets(不安全,已棄用)和 strcat 庫函數。

手動實現拼接邏輯

核心思路:找到目標字符串 s1 的結尾(\0),然後將源字符串 s2 的字符逐個複製過去,最後添加結束符。

參考代碼

#include <stdio.h>

char s1[80], s2[80];

// 自定義拼接函數:將 b 拼接到 a 末尾
void f(char *a, char *b) {
    char *a1 = a;
    // 1. 移動指針到 a 的結尾
    while (*a1 != '\0') a1++;
    // 2. 逐字符複製 b 到 a 末尾
    for (char *b1 = b; *b1 != '\0'; b1++, a1++) {
        *a1 = *b1;
    }
    // 3. 添加字符串結束標誌
    *a1 = '\0';
}

int main() {
    printf("say sth:");
    // 建議使用 fgets 替代 gets,防止緩衝區溢出
    fgets(s1, sizeof(s1), stdin);
    s1[strcspn(s1, "\n")] = 0; // 去除換行符

    printf("say sth. again:");
    fgets(s2, sizeof(s2), stdin);
    s2[strcspn(s2, "\n")] = 0;

    f(s1, s2);
    printf("%s", s1);
    return 0;
}

關鍵點解析

  1. 指針算術: 利用指針遍歷和修改內存,比數組下標更高效且本質清晰。
  2. 安全性: 代碼假設 s1 有足夠空間容納拼接結果(此處 80 字節)。實際工程中必須傳入目標緩衝區大小並檢查邊界。
  3. 棄用 gets: gets 不檢查邊界,極易導致緩衝區溢出漏洞,C11 標準已移除。請統一使用 fgets。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved