char *token = "gkjsdhvcxvcvbcbcv"
char c[90];
strcpy( c, token);
c[sizeof(c)-1] = '\0';
char *broken = strtok(c, " ");
if ( broken != NULL)
{
//Should not come here as there is no white space???
}
答案 0 :(得分:14)
您正在获取第一个标记,这是整个字符串。第二次调用将返回NULL,因为没有更多令牌:
char *token = "gkjsdhvcxvcvbcbcv"
char c[90];
strcpy( c, token);
c[sizeof(c)-1] = '\0';
char *broken = strtok(c, " ");
if ( broken != NULL) {
// Will come in here, broken == c.
}
broken = strtok(NULL, " ");
if ( broken != NULL) {
// Won't come in here.
}
答案 1 :(得分:3)
在没有分隔符的情况下,字符串本身是第一个标记。
如果您尝试打印broken
,我认为您会看到这种情况。
如果您希望在字符串缺少特定字符时未执行某段代码,则应使用strstr
或strchr
进行测试。
答案 2 :(得分:3)
strtok将输入字符串分成由输入分隔符分割的较小字符串。由于没有空格,因此返回整个字符串。
答案 3 :(得分:3)
您是否正在尝试确定字符串中是否包含空格?
如果是这样,那么解决方案是使用strchr()而不是strtok()。 e.g。
if (strchr(c, ' ') == NULL) {
// string has no spaces
} else {
// string has at least one space
}
如果只想在字符串包含至少一个分隔符时对字符串进行标记,则需要同时使用strchr()和amp;的strtok():
char *broken = NULL;
if (strchr(c, ' ') != NULL)
broken = strtok(c, " ");
答案 4 :(得分:0)
上述代码可能出错:
正如其他人所指出的那样,strtok()似乎行为正常。