这是我的程序(用C语言编写,在Omega上编译和运行,如果有任何区别的话):
#include <stdio.h>
#include <string.h>
int main (void)
{
char string[] = " hello!how are you? I am fine.";
char *token = strtok(string,"!?.");
printf("Token points to '%c'.\n",*token);
return 0;
}
这是我期待的输出:
"Token points to '!'."
但我得到的输出是:
"Token points to ' '."
从试验和错误中,我知道这是指字符串中的第一个字符:&#34; hello!&#34;之前的空格。
为什么我没有得到我期待的输出,我该如何解决?我确实从我在这里读过的内容中了解到,strtok最好埋在沟里,但我们假设(如果可能的话)我必须在这里使用它,而我必须让它发挥作用。
答案 0 :(得分:0)
根据strtok
手册页描述
strtok()函数将字符串解析为一系列标记。上 第一次调用strtok()时应该指定要解析的字符串 在str。在应该解析相同字符串的每个后续调用中,str 应为NULL。
它根据分隔符解析字符串,并返回字符串而不是分隔符。
在您的情况下,分隔符为"!?."
char string[] = " hello!how are you? I am fine.";
第一次出现的分隔符"!"
在字符串" hello"
之后匹配。因此,它会返回" hello"
作为strtok
的返回值。而且您的输出只是' '
字符串的第一个字符" hello"
。
答案 1 :(得分:-1)
有人刚发布了答案。它对我有用,现在我无法找到它。如果其他人有同样的问题,请记住最好的记录。
char *token = strtok(string,"!?.");
token = strtok(NULL, "!?."); //<--THIS
标记指向第一个分隔符后面的第一个字母,这至少是我可以使用的东西。谢谢陌生人!