2009-10-02 75 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

相關問題