函數 char **split(char *mother, char split_char) 按指定字符分割字符串,返回以空字符串結尾的動態分配子串指針數組。
mother,遇到分隔符將緩衝區 buf 內容 malloc 複製到 arry[j],j++。len_sub==0 繼續)。arry 末尾添加一個指向空字符串的指針作為結束標記。char **split(char *mother, char split_char) {
char *arry[1024];
char buf[1024] = {0};
int i, j=0, k=0;
for (i=0; i<strlen(mother); i++) {
if (mother[i] == split_char) {
if (strlen(buf) > 0) {
arry[j] = malloc(strlen(buf)+1);
strcpy(arry[j++], buf);
memset(buf, 0, sizeof(buf)); k=0;
}
} else { buf[k++] = mother[i]; }
}
if (strlen(buf) > 0) { // 最後一段
arry[j] = malloc(strlen(buf)+1);
strcpy(arry[j++], buf);
}
arry[j] = malloc(1); arry[j][0] = '\0'; // 結束標記
return arry; // 注意:返回棧上數組指針,實際使用需改為動態分配或靜態存儲
}
主程序調用並遍歷打印:while(strlen(ss[i])) printf("%s\n", ss[i++]);。注意棧上數組返回指針的生命週期問題,工程中應動態分配 arry 或改為輸出參數。