Como ya ha mirado en strtok
simplemente seguir por el mismo camino y dividir su cadena utilizando el espacio (' '
) como delimitador, a continuación, utilizar algo tan realloc
para aumentar el tamaño de la matriz que contiene los elementos que se han pasado a execvp
.
Vea el siguiente ejemplo, pero tenga en cuenta que strtok
modificará la cadena que se le pasa. Si no desea que esto suceda, debe hacer una copia de la cadena original, usando strcpy
o una función similar.
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)
Si desea dividir en función de espacios, ¿por qué ha especificado ';' como delimitador? –
Por ejemplo: string = "ls -l; date; set + v" – Jordan