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

时间:2018-03-28 06:22:38

标签: c delimiter strtok

这是我的程序(用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最好埋在沟里,但我们假设(如果可能的话)我必须在这里使用它,而我必须让它发挥作用。

2 个答案:

答案 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

标记指向第一个分隔符后面的第一个字母,这至少是我可以使用的东西。谢谢陌生人!