我一直在尝试使用空格作为分隔符来标记一个字符串,但它不起作用。有没有人对为什么它不起作用有什么建议?
编辑:标记化使用:
strtok(string, " ");代码如下所示
pch = strtok (str," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ");
}发布于 2008-11-05 19:57:39
如下所示:
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*。
发布于 2008-11-05 19:57:54
以下是strtok用法的一个示例,请记住,strtok对其输入字符串是破坏性的(因此不能用于字符串常量
char *p = strtok(str, " ");
while(p != NULL) {
printf("%s\n", p);
p = strtok(NULL, " ");
}基本上需要注意的是,将NULL作为第一个参数传递给strtok会告诉它从之前标记的字符串中获取下一个标记。
发布于 2008-11-05 20:14:22
strtok可能是非常危险的。它不是线程安全的。它的预期用途是在循环中一遍又一遍地调用,传递上一个调用的输出。strtok函数有一个存储strtok调用状态的内部变量。这种状态对于每个线程来说并不是唯一的-它是全局的。如果任何其他代码在另一个线程中使用strtok,您就会遇到问题。也不是你想要追踪的那种问题!
我建议使用regex实现,或者使用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”字符串在被分隔时会被销毁。这可能不是首选行为=)
https://stackoverflow.com/questions/266357
复制相似问题