用strtok函数拆分字符串

来源:互联网 发布:硬盘分区后数据恢复 编辑:程序博客网 时间:2024/06/06 07:25

字符串拆分函数的实现:

/** * split_string * 用分隔符[delims]拆分字符串[src],结果存放到字符串数组[dest]中 * 返回拆分出来的字符串数量 */int split_string(const char* src, char* dest[], const char* delims){    char* str;    char* result = NULL;    int i = 0;    if((src == NULL) || (delims == NULL)){        return i;    }    /** strtok函数会改变原串内容,故建立一个拷贝 */    str = (char*)malloc(sizeof(char) * (strlen(src) + 1));    if(str == NULL){        return i;    }    strcpy(str, src);    /** 利用strtok函数拆分字符串 */    result = strtok(str, delims);    while(result != NULL){        strcpy(dest[i++], result);        result = strtok(NULL, delims);    }    free(str);    return i;}


字符串拆分的应用很广,GPS模组通过串口传送出来的数据就需要拆分后再处理:

#define COUNT (16)#define LENGTH (8)int main(int argc, char* argv[]){    char* dest[COUNT];    int n;    int i;    int j;    /** 分配足够的空间用于存放拆解出来的数据 */    for(i = 0; i < COUNT; i++){        dest[i] = (char*)malloc(LENGTH);        if(dest[i] == NULL){            for(j = 0; j < i; j++){                free(dest[j]);            }            return -1;        }    }    /** 拆解GPS可视卫星状态数据并打印出来 */    n = split_string("$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76", dest, ",");    for(i = 0; i < n; i++){        printf("%s\n", dest[i]);    }    for(i = 0; i < COUNT; i++){        free(dest[i]);    }    return 0;}

打印的结果如下:

$GPGSV3311290930124160902036*76



0 0