我正在尝试用strtok分割字符串,但我无法打印字符串的第二部分。
int main (void) {
char str[128];
char *ptr;
strcpy (str, "123456 789asdf");
strtok (str, " ", &ptr);
printf ("'%s' '%s'\n", str, ptr);
return 0;
}
结果是这样的:
'123456' '12jfs90123#4'
答案 0 :(得分:1)
在我看来,你已经误解了strtok
的工作方式。
第二个参数应该指向一个分隔符字符串。 "当前" string是返回值。在第一次调用时,您传递要拆分的字符串。在后续调用中,为第一个参数传递NULL。
strtok
还会修改传递给它的字符串,因此您必须不将字符串文字作为第一个参数传递。
工作代码通常至少看起来像这样:
char input[] = "123456 789asdf";
char *substring = strtok(input, " ");
do {
printf("%s\n", substring);
} while (strtok(NULL, " "));
但是,如果您知道自己只会寻找两个论点,那么scanf
可能更容易使用:
char s1[256], s2[256];
sscanf(str, "%255s %255s", s1, s2);
答案 1 :(得分:1)
strtok()
与您使用它的方式略有不同:
char str[] = "123456 789asdf";
char* token = strtok (str, " ");
char* token2 = strtok (NULL, " ");
printf ("'%s' '%s'\n", token, token2);
输出所需的:'123456' '789asdf'
答案 2 :(得分:1)
你需要继续调用strtok,直到它返回NULL,因为strtok会返回每个函数调用时分割得到的一个标记。 这是工作代码:
int main (void) {
char str[128];
char *ptr;
strcpy (str, "123456 789asdf");
ptr = strtok (str, " ");
while(ptr != NULL)
{
printf ("'%s'\n", ptr);
ptr = strtok(NULL, " ");
}
return 0;
}