2014-05-13 52 views
1

我試圖創建一個函數,用給定的定界符標記給定的字符串,將標記放入2D字符數組並將其返回。下面的代碼顯示:使用strtok()標記字符串會導致崩潰c

char** stringTokenizer(const char* str, const char* delims){ 
     char** tokens; 
     size_t len = strlen(str); 
     char localstr[len+1]; 
     int tokenslen=0; 
     strcpy(localstr, str); 
     tokens=malloc(sizeof(char*)); 

     char* tmp = strtok(localstr, delims); 
     while(tmp){ 
        if(++tokenslen>1) realloc(tokens, tokenslen*sizeof(char*)); 
        tokens[tokenslen-1]=malloc((strlen(tmp)+1)*sizeof(char)); 
        strcpy(tokens[tokenslen-1],tmp); 
        tmp = strtok(NULL, delims); 
     } 
     if(tokenslen==0){ 
         free(tokens); 
         return NULL; 

     } else return tokens; 
} 

當我嘗試打印任何令牌[我]即時通訊崩潰。

只要有一個令牌,我會增加令牌數組的大小併爲要複製的令牌分配指針。

有什麼建議嗎?

謝謝!

+0

你應該考慮雙指針在這裏:'令牌=的malloc(的sizeof(字符*));'ATLEAST。 – tod

+0

你如何印製代幣? – MicroVirus

+5

'realloc(tokens,tokenslen * sizeof(char *));':你放棄返回值。 – BLUEPIXY

回答

0

嘗試做這個

char** stringTokenizer(const char* str, const char* delims){ 
     char** tokens = NULL; 
     size_t len = strlen(str); 
     char localstr[len+1]; 
     int tokenslen=0; 
    char **temp;//Change 
     strcpy(localstr, str); 

     //tokens=malloc(sizeof(char*)); 

     char* tmp = strtok(localstr, delims); 
     while(tmp){ 
        //if(++tokenslen>1) realloc(tokens, tokenslen*sizeof(char*)); 
    temp = realloc(tokens, tokenslen*sizeof(char*)); 
    tokens = temp; 
        tokens[tokenslen-1]=malloc((strlen(tmp)+1)*sizeof(char)); 
        strcpy(tokens[tokenslen-1],tmp); 
        tmp = strtok(NULL, delims); 
     } 
     /*if(tokenslen==0){ 
         free(tokens); 
         return NULL; 

     } else*/ return tokens; 
} 

謝謝@netcoder