2016-03-19 6 views
0

Ich habe versucht, das Array, das ich erhielt, als Argument in einer Funktion mit strtok() zu teilen und es funktioniert einfach nicht wie erwartet. Zum Beispiel erhalte ich diese Zeichenfolge: "ls -l" und ich habe nur "ls". Darüber hinaus möchte ich die Token in einem Array von Zeichenfolgen speichern. Hier ist, was ich bisher getan haben:Strtok() das Array nicht richtig aufteilen

int mysystem(char *s) { 
    int i; 
    char *tok , *aux; 
    int conta = 0; 
    int pid, status; 
    int j = 0; 

    tok = strtok(s , " "); 

    while (tok != NULL) { 
     tok = strtok(NULL, s); 
     conta++; 
    } 

    char *store[conta]; 
    i = 0; 
    aux = strtok(s ," "); 

    while (aux != NULL) { 
     store[i] = aux; 
     aux = strtok(NULL, s); 
     i++; 
    } 

    pid = fork(); 
    if (pid == 0) 
     execvp(store[0], store); 

    while (j != conta) { 
     wait (&status); 
     j++; 
    } 
    return 0; 
} 

Dies ist die wichtigste von wo ich den String in meiner Funktion bin vorbei:

int main(int args, char **arg) { 
    int i; 
    int s; 
    int f = 0; 

    if (args >= 2) { 
     int length = 0; 

     for (i = 1; i < args; ++i) { 
      length += strlen(arg[i]); 
     } 
     char *output = (char*)malloc(length + 1); 
     char *dest = output; 
     i = 1; 

     while (i < args) { 
      dest = strcat (dest,arg[i]); 
      i++; 
      if (i < args) { 
       dest = strcat (dest," "); 
      } 
     }  
     dest = strcat(dest, "\0"); 
     s = mysystem(dest); 
     free(output); 
     return s; 
    } 
} 
+0

Ihr Programm würde sich unerwartet verhalten, wenn 'argv [i]' ein Leerzeichen ('''') enthielte. – alk

+0

"* Ich möchte die Token in ein Array von Strings speichern *" tu das, momentan ist der Code nicht, wie 'char * store [conta];' ist ein Array von Zeigern auf 'char'. – alk

+0

Erfahren Sie, wie Sie Ihren Code konsistent einrücken können. – chqrlie

Antwort

1

strtok ändert die Zeichenfolge, so dass Sie nicht führe es zweimal mit derselben Zeichenfolge aus. s wurde in eine Reihe von Zeichenfolgen konvertiert, die durch NUL Zeichen getrennt sind. Ändern Sie die Verwendung eines Arrays, das "lang genug" ist und gehen Sie einfach einmal durch.