Je ne sais pas trop comment faire cela en C:
char* curToken = strtok(string, ";");
//curToken = "ls -l" we will say
//I need a array of strings containing "ls", "-l", and NULL for execvp()
Comment pourrais-je procéder?
Puisque vous avez déjà examiné strtok
continuez simplement sur le même chemin et divisez votre chaîne en utilisant l'espace (' '
) comme délimiteur, puis utilisez quelque chose comme realloc
pour augmenter la taille du tableau contenant les éléments à passer à execvp
.
Voir l'exemple ci-dessous, mais gardez à l'esprit que strtok
modifiera la chaîne qui lui est passée. Si vous ne voulez pas que cela se produise, vous devez faire une copie de la chaîne d'origine, en utilisant strcpy
ou une fonction similaire.
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)
Voici un exemple d'utilisation de strtok emprunté à MSDN.
Et les bits pertinents, vous devez l'appeler plusieurs fois. Le token
char * est la partie que vous insérez dans un tableau (vous pouvez comprendre cette partie).
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
/* Establish string and get the first token: */
token = strtok( string, seps );
while( token != NULL )
{
/* While there are tokens in "string" */
printf( " %s\n", token );
/* Get next token: */
token = strtok( NULL, seps );
}
}