// 從 src 索引 start (1-based) 開始,複製 len 個字元到 dst
// 返回實際複製長度
int substr(char dst[], const char src[], int start, int len);
#include <stdio.h>
#include <string.h>
int substr(char dst[], const char src[], int start, int len) {
if (start < 1) start = 1;
int src_len = strlen(src);
if (start > src_len) { dst[0] = '\0'; return 0; }
int max_copy = src_len - start + 1;
if (len > max_copy) len = max_copy;
for (int i = 0; i < len; ++i) {
dst[i] = src[start - 1 + i];
}
dst[len] = '\0'; // 確保結尾
return len;
}
int main() {
char src[100], dst[100];
int start, len;
printf("輸入字串 (長度<100): ");
fgets(src, sizeof(src), stdin);
src[strcspn(src, "\n")] = '\0'; // 移除換行
printf("起始位置 (1-based): ");
scanf("%d", &start);
printf("複製長度: ");
scanf("%d", &len);
int copied = substr(dst, src, start, len);
printf("子字串: %s (長度 %d)\n", dst, copied);
return 0;
}
start 超出範圍、len 超過剩餘長度。dst[len] = '\0' 確保輸出為合法 C 字串。fgets 而非 gets,避免緩衝區溢位。C 標準庫無 substr,但可用 strncpy 搭配手動加 \0,或 C++ std::string::substr。