函式規格
int substr(char dst[], char src[], int start, int len);
- 從
src 起始位置向後偏移 start 字元處開始複製。
- 最多複製
len 個非 NUL 字元到 dst。
- 複製結束後
dst 必須以 '\0' 結尾。
- 回傳實際存入
dst 的字串長度。
完整實作
#include
#include
#include
int substr(char dst[], char src[], int start, int len) {
assert(dst != NULL);
assert(src != NULL);
int ret = 0;
/* 移動 src 指標到起始位置 */
while (start--) {
src++;
}
/* 若剩餘長度不足 len,調整 len */
if (strlen(src) < len) {
len = strlen(src);
}
ret = len;
/* 複製字元 */
while (len--) {
*dst++ = *src++;
}
*dst = '\0'; // 結尾補 NUL
return ret;
}
int main() {
char *p = "bit-tech";
char arr[10];
int ret = substr(arr, p, 4, 5); // 從索引 4 開始取 5 字元 → "tech"
printf("%d\n", ret); // 4(實際可取長度)
printf("%s\n", arr); // tech
system("pause");
return 0;
}
邏輯說明
- 參數檢查:
assert 確保指標非空。
- 定位起始:
while(start--) src++; 將 src 移至目標起始位址。
- 長度修正:若剩餘字元少於
len,以實際剩餘長度為準。
- 逐字複製:
while(len--) *dst++ = *src++;。
- 補終止符:
*dst = '\0'; 確保 dst 為合法 C 字串。
注意事項
start 為 0 基索引;若超出字串長度,strlen(src) 為 0,函式回傳 0 且 dst 為空字串。
- 呼叫端需確保
dst 空間足夠(至少 len+1)。