标签: strtok

C中的strtok函数如何工作?

我找到了这个解释strtok函数的示例程序:

#include <stdio.h>
#include <string.h>

int main ()
{
    char str[] ="- This, a sample string.";
    char * pch;
    printf ("Splitting string \"%s\" into tokens:\n",str);
    pch = strtok (str," ,.-");
    while (pch != NULL)
    {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道这是如何工作的.

如何pch = strtok (NULL, " ,.-");返回一个新令牌呢?我的意思是,我们要求strtokNULL.这对我来说没有多大意义.

c strtok

20
推荐指数
2
解决办法
2万
查看次数

strtok功能线程安全

我花了一些时间来调试一个给出分段错误的程序.这个bug是非常不确定和间歇性的,这很烦人.我把它缩小到strtok的召唤.我怀疑strtok的调用是在两个不同的线程中分割字符串导致分段错误.我可以在两个不同的线程中调用strtok吗?

谢谢.

c linux thread-safety strtok

19
推荐指数
2
解决办法
1万
查看次数

如何使用Strtok标记Const char*?

我有一个const char*变量,它可能有一个像"OpenStack:OpenStack1"的值.我想用strtok标记这个const char*,其中分隔符(它是一个const char*类型)是":".但问题是strtok是以下类型:char*strtok(char*str,const char*delimiters);

这意味着我不能使用const char*作为第一个输入,因为它必须是char*.你能告诉我如何将这个const char*转换为char*吗?

谢谢.

c c++ strtok

18
推荐指数
1
解决办法
9400
查看次数

使用strtok_r时出现分段错误

任何人都可以解释为什么我在下面的例子中得到分段错误?

#include <stdio.h>
#include <string.h>

int main(void) {
  char *hello = "Hello World, Let me live.";
  char *tokens[50];
  strtok_r(hello, " ,", tokens);
  int i = 0;
  while(i < 5) {
    printf("%s\n", tokens[i++]);
  }
}
Run Code Online (Sandbox Code Playgroud)

c strtok segmentation-fault

16
推荐指数
3
解决办法
1万
查看次数

为什么strtok会改变这样的输入?

好的,所以我理解strtok会修改它的输入参数,但在这种情况下,它会将输入字符串折叠成只有第一个标记.为什么会发生这种情况,我该怎么做才能解决这个问题?(请注意,我不是在谈论变量"temp",它应该是第一个令牌,而是变量"input",在一次调用strtok后变为"this")

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
   char input[]="this is a test of the tokenizor seven";
   char * temp;
   temp=strtok(input," ");
   printf("input: %s\n", input); //input is now just "this"
}
Run Code Online (Sandbox Code Playgroud)

c strtok

16
推荐指数
2
解决办法
1万
查看次数

C中嵌套的strtok函数问题

我有一个像这样的字符串:

a;b;c;d;e
f;g;h;i;j
1;2;3;4;5
Run Code Online (Sandbox Code Playgroud)

我想逐个元素地解析它.我使用嵌套的strtok函数,但它只是拆分第一行并使令牌指针为null.我怎么能克服这个?这是代码:

token = strtok(str, "\n");

while(token != NULL && *token != EOF)
{
    char a[128], b[128];
    strcpy(a,token);
    strcpy(b,a);
    printf("a:%s\n",a);
    char *token2 = strtok(a,";");
    while(token2 != NULL)
    {
        printf("token2 %s\n",token2);
        token2 = strtok(NULL,";");
    }
    strcpy(token,b);
    token = strtok(NULL, "\n");
    if(token == NULL)
    {
        printf("its null");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

token 2 a
token 2 b
token 2 c
token 2 d
token 2 e
Run Code Online (Sandbox Code Playgroud)

c nested token tokenize strtok

14
推荐指数
2
解决办法
2万
查看次数

在c中使用strtok

我需要使用strtok读取名字和姓氏并将其分开.如何在两个单独的char数组中存储我可以独立使用它们的名称?

#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="test string.";
  char * test;
  test = strtok (str," ");
  while (test != NULL)
  {
    printf ("%s\n",test);
    test= strtok (NULL, " ");
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c strtok

14
推荐指数
2
解决办法
4万
查看次数

在C中的循环中使用strtok()?

我试图在嵌套循环中使用strtok().但这并没有给我预期的结果.可能是因为他们使用相同的内存位置.我的代码形式如下: -

char *token1 = strtok(Str1, "%");
while(token1 != NULL )
{
  char *token2 = strtok(Str2, "%");
  while(token2 != NULL )
   {
      //DO SMTHING
      token2 = strtok(NULL, "%");
    }
     token1 = strtok(NULL, "%");
     // Do something more
 }
Run Code Online (Sandbox Code Playgroud)

c string strtok

13
推荐指数
1
解决办法
1万
查看次数

用C++分隔字符串

我试图将一个字符串分成多个字符串,以制作一个自定义的终端.到目前为止,我一直在使用strtok分离控制信号,但是我不明白如何分离角色的特定实例.例如:

string input = "false || echo \"hello world\" | grep hello";

当试图strtok这个input并试图分开使用|输出将是:

false ,echo "hello world" , grep hello

相反,我希望输出为:

false || echo "hello world" , grep hello

怎样才可以有函数strtok治疗|||不同的,而不是它说他们是一样的吗?

c++ string system-calls strtok

13
推荐指数
1
解决办法
566
查看次数

为什么要弃用strtok()?

我从很多程序员那里听到,strtok的使用可能会在不久的将来被弃用.有人说它还在.为什么这是一个糟糕的选择?strtok()在标记给定字符串时效果很好.它是否必须对时间和空间的复杂性做任何事情?我在互联网上找到的最佳链接就是这个.但这似乎并没有解决我的好奇心.如果可能,建议任何替代方案.

c token strtok

13
推荐指数
2
解决办法
2637
查看次数