利用指針偏移 *(str + i) 或下標 str[i] 訪問單個字符,配合 for 循環控制起始位置與長度。
#include <stdio.h>
int main(void) {
char *str = "abcdefg"; // 字符串字面量(只讀)
int start = 2; // 起始索引(0-based),即 'c'
int len = 3; // 要輸出的字符數
printf("輸出片段: ");
for (int i = 0; i < len; ++i) {
putchar(*(str + start + i)); // 或 putchar(str[start + i]);
}
putchar('\n'); // 輸出: cde
return 0;
}
// 從 src 起始位置 start 複製 len 字符到 dest,自動添加 \0
// 返回實際複製長度,-1 表示參數非法
int substr(const char *src, int start, int len, char *dest, int dest_size) {
if (!src || start < 0 || len < 0 || !dest || dest_size <= len) return -1;
int src_len = 0;
while (src[src_len]) src_len++;
if (start >= src_len) return 0;
if (start + len > src_len) len = src_len - start;
for (int i = 0; i < len; ++i) dest[i] = src[start + i];
dest[len] = '\0';
return len;
}
start+len 越界訪問非法內存。char *str = "..." 指向只讀區,不可修改;若需修改,用 char str[] = "..."。wchar_t 或 UTF-8 庫處理。