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;
}
}
Ihr Programm würde sich unerwartet verhalten, wenn 'argv [i]' ein Leerzeichen ('''') enthielte. – alk
"* 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
Erfahren Sie, wie Sie Ihren Code konsistent einrücken können. – chqrlie