示例:
#include<stdio.h>
#include<string.h>
int main()
{
char str[1024];
char *buff,*temp, *result=NULL;
char tok[]=" ";
printf("enter string:\n");
gets(str);
buff=str;
result= strtok(buff,tok);
while(result != NULL)
{
printf("%s\n",result);
result = strtok(NULL,tok);
}
printf("\n");
char tok1[]= " ";
temp=str;
result= strtok(temp,tok1);
while(result != NULL)
{
printf("%s\n",result);
result = strtok(NULL,tok1);
}
}
**Output coming :**
enter string:
Hello how are you
Hello
how
are
you
Hello
**But It should give:**
enter string:
Hello how are you
Hello
how
are
you
Hello
how
are
you
为什么strtok在打印第一个单词(即hello)后给出null。 我正在使用另一个变量并初始化它,并使用另一个令牌变量以及如何获得欲望结果? strtok是否需要重新使用它
答案 0 :(得分:3)
strtok()
修改输入字符串。因此,在第一轮标记后,原始字符串str
已被修改(因为temp
指向str
)。
因此,在将字符串传递给strtok()
之前,请复制字符串。
其他改进:
1)不要使用已弃用的gets()
。请改用fgets()
以避免潜在的缓冲区溢出
2)使用strtok_r()
,因为它是可重入的。