在C中获得Strtok的弦乐

时间:2011-10-10 13:37:28

标签: c strtok

我想将一个字符串拆分为3个部分。

gets(input);

printf("\n%s\n",input);

first = strtok (input, " ");
second = strtok ( NULL, " " );
others = "";
while(input != NULL){
    tmp = strtok ( NULL, " " );
    strcat(others,tmp);
}
像这样...所以我希望得到第一个单词,第二个单词成为字符串,其他单词成为字符串。此代码失败,我该如何解决?

3 个答案:

答案 0 :(得分:1)

你应该检查

while (tmp != NULL)

另外,“其他人”并没有指向任何分配的内存,所以我希望这会崩溃,直到你修复它。

答案 1 :(得分:1)

C中的字符串不是魔术,它们是字符数组。你不能只strcat成一个只读的空字符串。相反,您必须提供自己的目标字符串:

char others[1000] = { 0 };
char * tmp;

// ...

while ((tmp = strtok(NULL, " ")) != NULL)
{
  strcat(others, tmp);
}

您还使用了inputtmp错误;你应该在处理之前检查strtok的结果。

这有点危险,因为您无法控制生成的字符串长度。您应该使用strncat代替,但这意味着您还必须保留附加字符的数量。

答案 2 :(得分:0)

代码有几个缺陷:

假设others是一个字符数组,你不能以这种方式使用它。你必须分配足够的内存。

此外,条件应为

while(tmp != NULL)

此外,法规second = strtok ( NULL, " " );是多余的,您应该在循环内执行此操作。