標籤:short buffer ret 字串分割 ken 語言 tmp c語言 函數
C語言中通常可以使用sscanf與strtok進行對制定的分隔字元進行分割。sscanf函數的缺陷是對於1;2;3;;;4這樣分割符中間沒有值的情況處理不好(sscanf(str, "%*[^;];%[^;]",a))。可能存在其它的方式進行分割,目前不對此討論。
typedef struct split_str_struct{ char *str; unsigned short length;}SPLITSTRUCT;
以上聲明一個字串分割結構體,用作字元分割用。
字元分割函數:
static unsigned short StringSplit(char *instr, char *token, SPLITSTRUCT *out_strs){ char *start = instr; char *end = NULL; int ind = 0; if(!instr || !instr[0]) return -1; end = strstr(start, token); while(end != NULL) { out_strs[ind].str = start; out_strs[ind].length = end - start; ind ++; start = end + strlen(token); end = strstr(start, token); } out_strs[ind].str = start; out_strs[ind].length = strlen(start); return ind + 1;}
使用時,首先定義個結構體數組,其數組大小視能分割出多少內容而定。
SPLITSTRUCT sub_strings[10];
然後調用函數。並且提取其中的內容,假設我們要提取使用;分割的第二與第三個內容。
char tmp1[MAX_LEN + 1] = {0}; char tmp2[MAX_LEN + 1] = {0}; StringSplit(buffer, ";", sub_strings); if (sub_strings[1].length > 0 || sub_strings[1].length < MAX_LEN) { strncpy(tmp1, sub_strings[1].str, sub_strings[1].length); tmp1[sub_strings[1].length] = ‘\0‘; } if (sub_strings[2].length > 0 || sub_strings[2].length < MAX_LEN) { strncpy(tmp2, sub_strings[2].str, sub_strings[2].length); tmp2[sub_strings[2].length] = ‘\0‘; }
即可提取出內容。
C語言提取被特定字元分隔的字串中的內容