繁体   English   中英

非常基本的strtok程序滥用分隔符-C

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM