我正在编写一个令牌化程序。我想从文件中获取输入,然后将其存储在输入指针中。我正在使用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/