[英]Very basic strtok program misusing delimiters - C
这是我的程序(用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 ' '."
通过反复试验,我知道这是指字符串中的第一个字符:“ hello!”之前的空格。
为什么我没有得到期望的输出,我该如何解决? 我已经从这里读到的内容中确实了解到,strtok最好埋在沟渠中,但让我们假设(如果可能的话)我必须在这里使用它,并且必须使其工作。
根据strtok
手册页描述
strtok()函数将字符串解析为令牌序列。 首次调用strtok()时,应在str中指定要解析的字符串。 在每个随后的应解析相同字符串的调用中,str应该为NULL。
它根据定界符解析字符串,然后返回字符串而不是定界符。
在您的情况下,分隔符为"!?."
char string[] = " hello!how are you? I am fine.";
首次出现定界符"!"
在字符串" hello"
之后匹配。 因此它将返回" hello"
作为strtok
返回。 您的输出只不过是" hello"
字符串的第一个字符' '
。
有人刚刚发布了答案。 它对我有用,现在找不到了。 我记得最好是重新发布,以防其他人有同样的问题。
char *token = strtok(string,"!?.");
token = strtok(NULL, "!?."); //<--THIS
令牌指向第一个定界符之后的第一个字母,至少我可以使用它。 谢谢陌生人!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.