C - 将字符串拆分为字符串数组

问题描述 投票:0回答:2

我不完全确定如何在 C 中执行此操作:

char* curToken = strtok(string, ";");
//curToken = "ls -l" we will say
//I need a array of strings containing "ls", "-l", and NULL for execvp()

我该如何去做呢?

c c-strings
2个回答
69
投票

既然您已经研究过

strtok
,只需继续沿着相同的路径前进并使用空格 (
' '
) 作为分隔符来分割字符串,然后使用
realloc
来将包含元素的数组的大小增加到传递给
execvp

请参阅下面的示例,但请记住

strtok
将修改传递给它的字符串。如果您不希望发生这种情况,则需要使用
strcpy
或类似函数复制原始字符串。

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)

6
投票

这里是一个如何使用strtok的例子,借自MSDN。

而相关位,则需要多次调用。

token
char* 是您要填充到数组中的部分(您可以算出该部分)。

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 );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.