kom*_*mbo 24 c string tokenize
我一直试图使用SPACE作为分隔符来标记字符串,但它不起作用.有没有人建议为什么它不起作用?
编辑:使用以下方式标记:
strtok(string, " ");
Run Code Online (Sandbox Code Playgroud)
代码如下
pch = strtok (str," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ");
}
Run Code Online (Sandbox Code Playgroud)
gbj*_*anb 42
像这样做:
char s[256];
strcpy(s, "one two three");
char* token = strtok(s, " ");
while (token) {
printf("token: %s\n", token);
token = strtok(NULL, " ");
}
Run Code Online (Sandbox Code Playgroud)
注意:strtok修改字符串的标记,所以它不能是一个const char*.
Eva*_*ran 36
这里有一个例子strtok使用,请记住,strtok是破坏性的,它的输入字符串(因此不能永远被一个字符串常量使用
char *p = strtok(str, " ");
while(p != NULL) {
printf("%s\n", p);
p = strtok(NULL, " ");
}
Run Code Online (Sandbox Code Playgroud)
基本上需要注意的是,传递一个NULL作为第一个参数来strtok告诉它从之前标记的字符串中获取下一个标记.
strtok可能非常危险.它不是线程安全的.它的预期用途是在循环中反复调用,传入前一次调用的输出.strtok函数有一个内部变量,用于存储strtok调用的状态.这种状态并非每个线程都是唯一的 - 它是全局的.如果任何其他代码在另一个线程中使用strtok,则会出现问题.不是你要追查的那种问题!
我建议寻找正则表达式实现,或使用sscanf来拉开字符串.
试试这个:
char strprint[256];
char text[256];
strcpy(text, "My string to test");
while ( sscanf( text, "%s %s", strprint, text) > 0 ) {
printf("token: %s\n", strprint);
}
Run Code Online (Sandbox Code Playgroud)
注意:'text'字符串在分离时被销毁.这可能不是首选的行为=)