輸入兩個字符串,將它們拼接起來。原始代碼使用 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;
}
s1 有足夠空間容納拼接結果(此處 80 字節)。實際工程中必須傳入目標緩衝區大小並檢查邊界。gets 不檢查邊界,極易導致緩衝區溢出漏洞,C11 標準已移除。請統一使用 fgets。