Da Sie bereits in strtok
geschaut haben weiterhin nur den gleichen Weg nach unten und teilen Sie Ihre String-Raum mit (' '
) als Trennzeichen, so etwas wie realloc
verwenden, um die Größe des Arrays zu erhöhen, die Elemente enthält, übergeben werden execvp
.
Siehe das folgende Beispiel, aber bedenken Sie, dass strtok
die an ihn übergebene Zeichenfolge ändert. Wenn Sie dies nicht möchten, müssen Sie eine Kopie der ursprünglichen Zeichenfolge erstellen, indem Sie strcpy
oder eine ähnliche Funktion verwenden.
char str[]= "ls -l";
char ** res = NULL;
char * p = strtok (str, " ");
int n_spaces = 0, i;
/* split string and append tokens to 'res' */
while (p) {
res = realloc (res, sizeof (char*) * ++n_spaces);
if (res == NULL)
exit (-1); /* memory allocation failed */
res[n_spaces-1] = p;
p = strtok (NULL, " ");
}
/* realloc one extra element for the last NULL */
res = realloc (res, sizeof (char*) * (n_spaces+1));
res[n_spaces] = 0;
/* print the result */
for (i = 0; i < (n_spaces+1); ++i)
printf ("res[%d] = %s\n", i, res[i]);
/* free the memory allocated */
free (res);
res[0] = ls
res[1] = -l
res[2] = (null)
Wenn Sie basierend auf Leerzeichen aufteilen möchten, warum haben Sie ';' als Trennzeichen angegeben? –
Zum Beispiel: string = "ls -l; datum; set + v" – Jordan