我一直试图使用SPACE作为分隔符来标记字符串,但它不起作用.有没有人建议为什么它不起作用?
编辑:使用以下方式标记:
strtok(string, " ");
代码如下
pch = strtok (str," "); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " "); }
gbjbaanb.. 42
像这样做:
char s[256]; strcpy(s, "one two three"); char* token = strtok(s, " "); while (token) { printf("token: %s\n", token); token = strtok(NULL, " "); }
注意:strtok
修改字符串的标记,所以它不能是一个const char*
.
像这样做:
char s[256]; strcpy(s, "one two three"); char* token = strtok(s, " "); while (token) { printf("token: %s\n", token); token = strtok(NULL, " "); }
注意:strtok
修改字符串的标记,所以它不能是一个const char*
.
这里有一个例子strtok
使用,请记住,strtok
是破坏性的,它的输入字符串(因此不能永远被一个字符串常量使用
char *p = strtok(str, " "); while(p != NULL) { printf("%s\n", p); p = strtok(NULL, " "); }
基本上需要注意的是,传递一个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); }
注意:'text'字符串在分离时被销毁.这可能不是首选的行为=)