C语言中一般能够使用sscanf与strtok进行对制定的分隔符进行分割。sscanf函数的缺陷是对于1;2;3;;;4这样分割符中间没有值的状况处理很差(sscanf(str, "%*[^;];%[^;]",a))。可能存在其它的方式进行分割,目前不对此讨论。数组
typedef struct split_str_struct { char *str; unsigned short length; }SPLITSTRUCT;
以上声明一个字符串分割结构体,用做字符分割用。函数
字符分割函数:spa
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; }
使用时,首先定义个结构体数组,其数组大小视能分割出多少内容而定。code
SPLITSTRUCT sub_strings[10]; blog
而后调用函数。而且提取其中的内容,假设咱们要提取使用;分割的第二与第三个内容。token
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'; }
便可提取出内容。字符串