我想将一个字符串拆分为3个部分。
gets(input);
printf("\n%s\n",input);
first = strtok (input, " ");
second = strtok ( NULL, " " );
others = "";
while(input != NULL){
tmp = strtok ( NULL, " " );
strcat(others,tmp);
}
像这样...所以我希望得到第一个单词,第二个单词成为字符串,其他单词成为字符串。此代码失败,我该如何解决?
答案 0 :(得分:1)
你应该检查
while (tmp != NULL)
另外,“其他人”并没有指向任何分配的内存,所以我希望这会崩溃,直到你修复它。
答案 1 :(得分:1)
C中的字符串不是魔术,它们是字符数组。你不能只strcat
成一个只读的空字符串。相反,您必须提供自己的目标字符串:
char others[1000] = { 0 };
char * tmp;
// ...
while ((tmp = strtok(NULL, " ")) != NULL)
{
strcat(others, tmp);
}
您还使用了input
和tmp
错误;你应该在处理之前检查strtok
的结果。
这有点危险,因为您无法控制生成的字符串长度。您应该使用strncat
代替,但这意味着您还必须保留附加字符的数量。
答案 2 :(得分:0)
代码有几个缺陷:
假设others
是一个字符数组,你不能以这种方式使用它。你必须分配足够的内存。
此外,条件应为
while(tmp != NULL)
此外,法规second = strtok ( NULL, " " );
是多余的,您应该在循环内执行此操作。