0

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

gets(input);

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

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

像这样...所以我想将第一个单词,第二个单词放入字符串中,将其他单词放入字符串中。此代码失败,我该如何解决?

4

3 回答 3

1

你应该检查

while (tmp != NULL)

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

于 2011-10-10T13:39:35.400 回答
1

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

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

// ...

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

你也用inputtmp了;你应该strtok在处理它之前检查结果。

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

于 2011-10-10T13:42:58.547 回答
0

代码有几个缺陷:

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

此外,条件应该是

while(tmp != NULL)

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

于 2011-10-10T13:44:26.933 回答