程序的 strtok 部分出现错误

Buggy at strtok part of program

void reverseTokens(char *array,int nump,char*delimp)
{
   char * revString[nump+20];//array of pointer where 1 pointer points to one instance of a token
   char* token;
   int i=nump+19;

   token=strtok(array,delimp);

   while(token!=NULL) //assigning token's address to pointer + tokenizing
   {
      revString[i]=token;
      token=strtok(NULL,delimp);
      i--;

   }

   i++;

   for(int j=i;j<=nump+19;j++)
   {
      printf("%s ",revString[j]); 
   }

}

当我打印出第一个标记时,即 revString[i] 在不同的行上并且插入了一个额外的 space 字符。好像想不通?希望有人可以帮助我阐明这一点。

Sample Run:

Input: 1, 2, 3,4, 5

Output:
5
 4 3 2 1

如果传递的 array 是使用类似 fgets 的函数从 stdin 获得的,它可能在空终止符之前包含一个换行符。

如果 delimp 字符串不包含此字符,它将被 strtok 视为最后一个标记的一部分。

以下片段demonstrates这样的行为:

#include <stdio.h>
#include <string.h>

void reverse_tokens(char *array, int max_n_tokens, const char *delim)
{
    const char *tokens[max_n_tokens];
    int i = 0;

    const char *token = strtok(array, delim);

    while ( token  &&  i < max_n_tokens )
    {
        tokens[i] = token;
        token = strtok(NULL, delim);
        ++i;
    }

    while ( i-- > 0 )
    {
        printf("[%s] ", tokens[i]); 
    }
    putchar('\n');
}

int main(void)
{
    char str_1[] = "1, 2, 3,4, 5";    
    reverse_tokens(str_1, 5, ",");      // --> [ 5] [4] [ 3] [ 2] [1] 

    char str_2[] = "1, 2, 3,4, 5\n";
    reverse_tokens(str_2, 5, ",");      // --> [ 5
                                        //     ] [4] [ 3] [ 2] [1] 
    char str_3[] = "1, 2, 3,4 , 5\n";    
    reverse_tokens(str_3, 5, ", \n\r"); // --> [5] [4] [3] [2] [1] 

    char str_4[] = "1, 2, 3, 4, 5";    
    reverse_tokens(str_4, 3, ", \n\r"); // --> [3] [2] [1]
}