【问题标题】:How do I split a string in function in C? [duplicate]如何在C中的函数中拆分字符串? [复制]
【发布时间】:2019-11-17 13:41:29
【问题描述】:

我需要一个在c中拆分字符串的函数,我编写了代码并检查了它,我没有收到任何错误或警告,代码是:

int main()
{
   cutString("any#any#any5") ;
    return 0;
}
void cutString(char  query[2000]) {
    char * cut ;
    cut = strtok(query , "#") ;
printf("%s" , cut);

}

但是当我编译程序时,编译器卡住了,没有显示任何输出。 This is a picture for run screen.

【问题讨论】:

  • 这个问题的两个答案都忽略了一个重要事实:'strtok' 不能用于常量字符串,因为函数会在内部更改它。如果有人需要经过测试的工作示例,请随时通过邮件与我联系。

标签: c strtok


【解决方案1】:

注意strtok()的用法。根据Linux Man Page,在第一次调用函数时,您应该指定要解析的字符串作为第一个参数,而在每个后续调用中,您应该指定NULL

事实上,对同一个字符串的一系列调用维护了一个指向下一个要处理的字符的指针。如果您想检查是否没有找到更多令牌,只需查看返回值(在这种情况下为NULL)。

【讨论】:

    【解决方案2】:

    首先你应该了解strtok()的用法

    请记住,您不能在字符串文字上使用 strtok(),因为它会尝试修改它,这会导致未定义的行为。

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        char toCut[100] = "to#cut#this";
        cutString(toCut);
        return 0;
    }
    void cutString(char* query) {
        char* cut ;
        cut = strtok(query, "#"); // this first call returns a pointer to the first substring
        while(cut != NULL)
        {
            printf("%s\n", cut);
            cut = strtok(NULL, "#"); // each call to strtok returns a pointer to the next substring
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多