我找到了这个解释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, " ,.-");
返回一个新令牌呢?我的意思是,我们要求strtok
用NULL
.这对我来说没有多大意义.
我花了一些时间来调试一个给出分段错误的程序.这个bug是非常不确定和间歇性的,这很烦人.我把它缩小到strtok的召唤.我怀疑strtok的调用是在两个不同的线程中分割字符串导致分段错误.我可以在两个不同的线程中调用strtok吗?
谢谢.
我有一个const char*变量,它可能有一个像"OpenStack:OpenStack1"的值.我想用strtok标记这个const char*,其中分隔符(它是一个const char*类型)是":".但问题是strtok是以下类型:char*strtok(char*str,const char*delimiters);
这意味着我不能使用const char*作为第一个输入,因为它必须是char*.你能告诉我如何将这个const char*转换为char*吗?
谢谢.
任何人都可以解释为什么我在下面的例子中得到分段错误?
#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) 好的,所以我理解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) 我有一个像这样的字符串:
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) 我需要使用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) 我试图在嵌套循环中使用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) 我试图将一个字符串分成多个字符串,以制作一个自定义的终端.到目前为止,我一直在使用strtok分离控制信号,但是我不明白如何分离角色的特定实例.例如:
string input = "false || echo \"hello world\" | grep hello";
当试图strtok这个input
并试图分开使用|
输出将是:
false
,echo "hello world"
, grep hello
相反,我希望输出为:
false || echo "hello world"
, grep hello
怎样才可以有函数strtok治疗|
和||
不同的,而不是它说他们是一样的吗?
我从很多程序员那里听到,strtok的使用可能会在不久的将来被弃用.有人说它还在.为什么这是一个糟糕的选择?strtok()在标记给定字符串时效果很好.它是否必须对时间和空间的复杂性做任何事情?我在互联网上找到的最佳链接就是这个.但这似乎并没有解决我的好奇心.如果可能,建议任何替代方案.