2012-02-23 37 views
0

我遇到了strtok函數的問題。我不斷收到'巴士錯誤'。我寫了一個函數來返回一行中的所有單詞。有人能指出我的錯誤嗎?C編程strtok

注意:我用高級語言

void extract_words(char tokens[WORD_MAX][WORD_LEN], char* line, int* sizePtr) 
{ 
    printf("in extract words"); //for debugging 

    char* chPtr = NULL; 
    chPtr = strtok(line, " "); 

    int size = 1;        //words has one element 
    while(chPtr != NULL) 
    { 
    strcpy(tokens[size++], chPtr); 
    chPtr = strtok(NULL, " ");    //continue to tokenize the string 
    } 
    *sizePtr = size; 
} 

提前感謝!

+0

當你調用它時,你可能沒有提供'sizePtr'的有效地址。 – 2012-02-23 05:57:00

+0

這是我如何使用sizePtr:int size; int * sizePtr = &size; – CodeKingPlusPlus 2012-02-23 06:00:21

+1

也許你試圖傳遞一個字符串作爲行參數? – 2012-02-23 06:03:16

回答

1

strtok修改您傳遞給它的字符串,所以它不能是字符串文字。你應該可以這樣做:

void extract_words(char tokens[WORD_MAX][WORD_LEN], const char* line_arg, int* sizePtr) 
{ 
    char line[(WORD_LEN+1)*WORD_MAX]; 
    char* chPtr = NULL; 
    int size = 0; 

    strcpy(line,line_arg); 
    printf("in extract words"); //for debugging 


    chPtr = strtok(line, " "); 

    while(chPtr != NULL) 
    { 
    strcpy(tokens[size++], chPtr); 
    chPtr = strtok(NULL, " ");    //continue to tokenize the string 
    } 
    *sizePtr = size; 
} 

請注意,我也初始化大小爲零,因爲數組索引從零開始。

0

那麼......

你應該嘗試使用分隔符嗎?

這種情況下,我有源代碼。

int split(char *src, char *div, char **result,int *size) 
{ 
    int i, j, slen, dlen, key=0, start=0; 
    slen=strlen(src); 
    dlen=strlen(div); 
    for(i=0;i<slen;i++) 
    { 
     for(j=0;j<dlen;j++) 
     { 
      if(src[i]==div[j]) 
      { 
       src[i]=0x00; 
       result[key] = src+start; 
       key++; 
       start=i+1; 
      } 
     } 
    } 
    result[key]=src+start; 
    *size=key+1; 
    return 0; 
} 

使用

分裂(chatData, 「」,cmpData,& TOK);

「」:令牌 &托克:計數分裂字 chatData:原始數據

韓國Dalsam。