strtok - Fehler?



  • #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char **argv)
    { int x = 1;
      char str[] = "Bin gerade dabei etwas zu hinterlegen";
      char *str1;
    
      /* print what we have so far */
      printf("String: %s\n", str);
    
      /* extract first string from string sequence */
      str1 = strtok(str, " ");
    
      /* print first string after tokenized */
      printf("%i: %s", x, str1);
    
      /* loop until finishied */
      while (1)
      {
        /* extract string from string sequence */
        str1 = strtok(NULL, " ");
    
        /* check if there is nothing else to extract */
        if (str1 == NULL)
        {
          printf("Tokenizing complete\n");
          exit(0);
        }
    
        /* print string after tokenized */
        printf("%i: %s\n", x, str1);
        x++;
      }
    
      return 0;
    }
    

    So wenn ich diesen Quelltext mit dem VC++ .Net Compiler compilere spukt mir dien Konsole folgende Werte aus:

    String: Bin gerade dabei etwas zu hinterlegen
    1: Bin1: gerade
    2: dabei
    3: etwas
    4: zu
    5: hinterlegen
    Tokenizing complete
    Press any key to continue

    Irgendwie ist da doch was faul. Warum Schneidet er mir das erste Wort nicht ab sonder lässt sie so und macht da so ein komisches Bin1: gerade?
    Oder hab ich irgendwas übersehen (im Source)

    Georgius



  • Du machst beim printf des ersten Teilstrings kein \n.



  • MFK schrieb:

    Du machst beim printf des ersten Teilstrings kein \n.

    Stimmt, denn

    1: Bin[b]|[/b]1: gerade 
          ^
     da fehlt ein '\n'
    


  • Ich glaube so ist es richtig:

    #include <stdio.h> 
    #include <string.h> 
    
    int main(int argc, char **argv) 
    { int x = 1; 
      char str[] = "Bin gerade dabei etwas zu hinterlegen"; 
      char *str1; 
    
      /* print what we have so far */ 
      printf("String: %s\n", str); 
    
      /* extract first string from string sequence */ 
      str1 = strtok(str, " "); 
    
      /* print first string after tokenized */ 
      printf("%i: %s\n", x, str1);                  /* <-- '\n' */
      ++x;                                         /* <-- die 1 vor "gerade" soll eine 2 werden */
    
      /* loop until finishied */ 
      while (1) 
      { 
        /* extract string from string sequence */ 
        str1 = strtok(NULL, " "); 
    
        /* check if there is nothing else to extract */ 
        if (str1 == NULL) 
        { 
          printf("Tokenizing complete\n"); 
          exit(0); 
        } 
    
        /* print string after tokenized */ 
        printf("%i: %s\n", x, str1); 
        x++; 
      } 
    
      return 0; 
    }
    

    Gruss, flyingCoder


Anmelden zum Antworten