如何在C中将字符串拆分为2个字符串

Mar*_*ski 38 c string strtok

我想知道如何取一个字符串,用分隔符(例如空格)将其拆分为2,并将2个部分分配给2个单独的字符串.我尝试过strtok()但无济于事.

ere*_*eOn 56

#include <string.h>

char *token;
char line[] = "SEVERAL WORDS";
char *search = " ";


// Token will point to "SEVERAL".
token = strtok(line, search);


// Token will point to "WORDS".
token = strtok(NULL, search);
Run Code Online (Sandbox Code Playgroud)

更新

请注意,在某些操作系统上,strtok手册页提到:

此接口已被strsep(3)废弃.

示例strsep如下所示:

char* token;
char* string;
char* tofree;

string = strdup("abc,def,ghi");

if (string != NULL) {

  tofree = string;

  while ((token = strsep(&string, ",")) != NULL)
  {
    printf("%s\n", token);
  }

  free(tofree);
}
Run Code Online (Sandbox Code Playgroud)

  • `strtok()`修改它的输入,所以在字符串文字中使用它是坏juju(又名未定义的行为). (26认同)
  • @ereOn:指针和数组在C中是不同的东西,直到你在一个数组附近打喷嚏,然后它变成一个指针.这就是数组大小表达式`sizeof(arr)/ sizeof(arr [0])`的工作原理. (7认同)
  • `strtok()`已经过时了?哇!`strsep()`甚至不是标准C. (3认同)
  • 我想如果你将`char*line ="SEVERAL WORDS"改为`char line [] ="SEVERAL WORDS"`,你就完全了. (2认同)

Spa*_*rky 11

出于这样的目的,我倾向于使用strtok_r()而不是strtok().

例如 ...

int main (void) {
char str[128];
char *ptr;

strcpy (str, "123456 789asdf");
strtok_r (str, " ", &ptr);

printf ("'%s'  '%s'\n", str, ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这将输出......

'123456''789asdf'

如果需要更多分隔符,则循环.

希望这可以帮助.

  • strtok_r()是strtok()的可重入版本.有关重入的更多信息,请访问:http://en.wikipedia.org/wiki/Reentrant_%28subroutine%29 (3认同)