我正在编写一个令牌化程序。我想从文件中获取输入,然后将其存储在输入指针中。我正在使用strtok函数,但是当我打印令牌[i]时,我得到NULL。

 int tokenise(char *input, int file_output)
 {
     int i = 0;
     char *tokens[100];
     for(i=0 ;i<=20;i++)
     {
         tokens[i]= (char*)malloc(sizeof(char*));
     }

     char delim[] = " ,.;@/";
     printf("\n -------------  buffer data is %s",input);
     tokens[i] = strtok(input , delim);
     printf("tokens are %s",*tokens[0]);
     int j=0;

     while(NULL != tokens[i])
     {
         i++;
         tokens[i] = strtok(NULL,delim);
     }

     for(j = i; j <= 0; j--)
     {
         write(file_output,tokens[i],strlen(tokens[i]));
     }
     for(i = 0; i <= 20; i++)
     {
         printf("%s \n",*tokens[i]);
     }
     return SUCCESS;
}

最佳答案

出于某种原因,您分配了内存并向tokens[]的前21个元素写入了指针。在该循环的最后,i为21。然后,您使用strtok()解析输入字符串,并将其结果存储在tokens[21]的连续数组元素中。因此,您的两个循环需要重写:

for(j=21; j<i; j++)
    write(file_output,tokens[j],strlen(tokens[j]));

for(j=21; j<i; j++)
    printf("%s \n",*tokens[j]);


但是如果您删除了分配不必要内存的第一个循环,那就更好了。 strtok()返回指向原始字符串的指针,该字符串通过插入'\0'终止符而分成多个部分,因此您只需将指针存储在数组tokens[]中。

关于c - 关于c中的标记化的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29927828/

10-12 16:01