題目要求在不使用庫函數 strcat 的前提下,手動將 s2 拼接到 s1 末尾。關鍵步驟為:
s1 找到 '\0' 位置(索引 i)。s2,將每個字符依次複製到 s1[i++]。s1 新末尾寫入 '\0'。while (s2[j] != '\0') {
s1[i] = s2[j];
i++;
j++;
}
或精簡寫法:
while (s2[j] != '\0')
s1[i++] = s2[j++];
#include <stdio.h>
int main() {
char s1[80], s2[40];
int i = 0, j = 0;
printf("輸入 s1: ");
scanf("%s", s1); // 注意:%s 遇空格停止,含空格請用 fgets
printf("輸入 s2: ");
scanf("%s", s2);
// 找到 s1 末尾
while (s1[i] != '\0')
i++;
// 拼接 s2
while (s2[j] != '\0')
s1[i++] = s2[j++];
s1[i] = '\0'; // 關鍵:補上結束符
printf("拼接後: %s\n", s1);
return 0;
}
shar 應為 char。s1 大小需 ≥ strlen(s1) + strlen(s2) + 1,否則會越界。scanf("%s") 讀不到空格,實際項目建議用 fgets 並去換行符。printf 格式串中 \ 連接 應為 連接後的字符串為:%s,反斜桿屬誤輸入。| 函數 | 核心邏輯 |
|---|---|
strcpy(dest, src) | while (*src) *dest++ = *src++; *dest = '\0'; |
strlen(s) | int len=0; while(s[len++]); return len-1; |
strcmp(s1, s2) | while(*s1 && *s1==*s2) s1++,s2++; return *s1-*s2; |
掌握字符串底層操作,有助於深入理解指針與內存模型,也是嵌入式開發、系統編程的必備基本功。