2012-07-10 44 views
1

這裏我有一個字符串表示字符數組。這個數組也包含分隔符。現在我只想拿出沒有這個分隔符的字符串。想要將字符串分隔爲使用特定字符的令牌

我正在使用strtok函數。

我想用此分隔符分隔我所有的單詞。

但是,我在這段代碼中遇到了一些問題。

請讓我知道如果我做錯了什麼或者告訴我以不同的方式實現這件事情簡單易行,還要考慮記憶風險。

這裏這條線pch = strtok (str,&sep);什麼也沒有。問題只在這裏。

代碼

/* strtok example */ 
#include <stdio.h> 
#include <string.h> 

#define SEPRATOR 0x03 

int main() 
{ 
    char str[1024]; 
    int count = 0; 
    char sep; 
    memset(str,0,1024); 
    sep = SEPRATOR; 

    memcpy(str,"1",strlen("1")); 
    count = count + strlen("1"); 
    str[count++] = sep; 
    memcpy(str+count,"0",strlen("0")); 
    count = count + strlen("0"); 
    str[count++] = sep; 
    memcpy(str+count,"2",strlen("2")); 
    count = count + strlen("2"); 
    str[count++] = sep; 
    memcpy(str+count,"abc_1.0.xyz",strlen("abc_1.0.xyz")); 
    count = count + strlen("abc_1.0.xyz"); 
    str[count++] = sep; 
    memcpy(str+count,"3",strlen("3")); 
    count = count + strlen("3"); 
    str[count++] = sep; 
    memcpy(str+count,"23455.456",strlen("23455.456")); 
    count = count + strlen("23455.456"); 

    printf("Input String = %s\n",str); 

    char * pch; 
    int pchcount = 0; 
    pch = strtok (str,&sep); 
    while (pch != NULL) 
    { 
     pchcount++; 
     printf ("%d === %s\n",pchcount,pch); 
     pch = strtok (NULL,&sep); 
    } 
    return 0; 
} 
+0

@jrok感謝。它的完成 – 2012-07-10 17:12:57

+0

@chris您提出的問題是[標籤:C++]。這個問題被標記爲[tag:C]。但是,這個問題可能是[在c中標記字符串]的重複(http://stackoverflow.com/questions/266357/tokenizing-strings-in-c)。 – 2012-07-10 17:28:18

+0

@EitanT,我的不好,當我去找常見問題時,它被標記爲C++。 – chris 2012-07-10 17:48:38

回答

6

的第二個參數strtok()是空結尾的字符串(char*),但你通過一個單一的char的地址。而char*,它不會被空終止。更改爲:

char sep[2] = { SEPRATOR, 0 }; 

改變的sep當前使用相應:

str[count++] = sep[0]; 

pch = strtok(str, sep); 

您可能會發現snprintf()簡單構建你strmemcpy()調用序列。

另外,如果你想初始化str

char str[1024] = ""; /* instead of performing a memset(). */ 
+0

那麼我該如何做到這一點?什麼是解決方案 – 2012-07-10 17:12:04

+0

@Sam_k,只是更新了答案。 – hmjd 2012-07-10 17:13:18

+0

感謝您的回覆。它有必要釋放我在我的代碼中使用的pch指針?因爲我也必須照顧記憶問題。 – 2012-07-10 17:17:01

相關問題