2009-10-02 44 views
1
  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

所以什么解决的家伙? – 2009-10-02 12:01:33

+0

没有'解决方案',@Ankit,因为没有问题。有一个问题,所以我们提供了答案:-)控制进入中频,因为这是它设计的目的。 – paxdiablo 2009-10-02 12:07:32

回答

3

您是否试图确定字符串中是否有空格?

如果是这样,那么解决方案是使用strchr()而不是strtok()。例如

if (strchr(c, ' ') == NULL) { 
    // string has no spaces 
} else { 
    // string has at least one space 
} 

如果你想要来标记字符串仅如果字符串包含至少一个分隔符,那么你需要同时使用,和strchr()&的strtok():

char *broken = NULL; 
if (strchr(c, ' ') != NULL) 
    broken = strtok(c, " "); 
3

字符串本身在没有分隔符的情况下是第一个标记。

如果您尝试打印broken,我想您会看到这种情况。

如果您希望在某个字符串缺少特定字符时未执行一段代码,则应该使用strstrstrchr进行测试。

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. 
} 
3

strtok将输入字符串分割为由输入分隔符分割的较小字符串。由于没有空格,它会返回整个字符串。

0

事情会出错,上面的代码:

  • 没有使用至少strncpy()函数是要求 的问题,最终
  • 什么是 的sizeof(C)返回?我忘了在 时刻,但我的猜测要么是1, 或90(可能90)

和其他人士指出,strtok()函数似乎是正确的行为。

+0

@ Calyth:第一点是在这里讨论:http://stackoverflow.com/questions/1508838/how-to-copy-char-str-to-char-c-in-c。第二点:sizeof(c)返回90,其中strlen返回字符数char *(在另一个线程中也讨论) – 2009-10-02 13:24:23

+0

是的,我看到了类似的帖子。我从不喜欢sizeof(c),其中c是一个char []语法。有人根据它写了一个数组长度的宏,如果你不小心传递了char *,它会变得非常混乱。 – Calyth 2009-10-02 13:50:24

相关问题