C: Parse empty tokens from a string with strtok

后端 未结 8 1112
臣服心动
臣服心动 2020-12-10 19:08

My application produces strings like the one below. I need to parse values between the separator into individual values.

2342|2sd45|dswer|2342||5523|||3654|         


        
8条回答
  •  粉色の甜心
    2020-12-10 19:36

    Inspired by Patrick Schlüter answer I made this function, it is supposed to be thread safe and support empty tokens and doesn't change the original string

    char* strTok(char** newString, char* delimiter)
    {
        char* string = *newString;
        char* delimiterFound = (char*) 0;
        int tokLenght = 0;
        char* tok = (char*) 0;
    
        if(!string) return (char*) 0;
    
        delimiterFound = strstr(string, delimiter);
    
        if(delimiterFound){
            tokLenght = delimiterFound-string;
        }else{
            tokLenght = strlen(string);
        }
    
        tok = malloc(tokLenght + 1);
        memcpy(tok, string, tokLenght);
        tok[tokLenght] = '\0';
    
        *newString = delimiterFound ? delimiterFound + strlen(delimiter) : (char*)0;
    
        return tok;
    }
    

    you can use it like

    char* input = "1,2,3,,5,";
    char** inputP = &input;
    char* tok;
    while( (tok=strTok(inputP, ",")) ){
        printf("%s\n", tok);
    }
    

    This suppose to output

    1
    2
    3
    
    5
    

    I tested it for simple strings but didn't use it in production yet, and posted it on code review too, so you can see what do others think about it

提交回复
热议问题