strtok的重用给出了null

时间:2014-05-23 10:01:35

标签: c linux

示例:

  #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是否需要重新使用它

1 个答案:

答案 0 :(得分:3)

strtok()修改输入字符串。因此,在第一轮标记后,原始字符串str已被修改(因为temp指向str)。

因此,在将字符串传递给strtok()之前,请复制字符串

其他改进:

1)不要使用已弃用的gets()。请改用fgets()以避免潜在的缓冲区溢出 2)使用strtok_r(),因为它是可重入的。