2014-12-02 209 views
1

strsep未正確解析我的字符串。我使用" "作爲分隔符,它在字中間解析字符串。我無法弄清楚爲什麼。strsep()無法正常工作

代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 


#define BUFFERSIZE 128 
#define BLANK_STR " " 

static char *inputs[BUFFERSIZE]; 

void prepare_inputs(char *input){ 
    int i = 0; 
    char *token; 

    while ((token = strsep(&input,BLANK_STR)) != NULL) { 
     printf("token: %s\n", token); 
     if (inputs[i] == NULL) 
      inputs[i] = calloc(strlen(token) + 1, sizeof(char)); 
     else { 
      memset(inputs[i], 0, strlen(inputs[i])); 
     } 
     strncat(inputs[i], token, strlen(token)); 
     printf("inputs[i]: %s\n", inputs[i]); 
     i++; 
    } 
} 


int main(void) { 
    char *input = calloc(BUFFERSIZE, sizeof(char)); 

    while(1) { 
     fgets(input, sizeof(input), stdin); 
     prepare_inputs(input); 
    } 
} 

輸入:

hi hii hiii hiiii 

輸出:

token: hi 
inputs[i]: hi 
token: hii 
inputs[i]: hii 
token: 
inputs[i]: 
token: hiii 
inputs[i]: hiii 
token: hi 
inputs[i]: hi 
token: iii 

inputs[i]: iii 
+7

'sizeof'不會給你一個動態分配內存塊的大小。它給你指針的大小。 – 2014-12-02 18:32:32

+0

謝謝!我簡直不敢相信! – bmpasini 2014-12-02 18:45:41

+0

@DarkFalcon:您應該將其作爲答案發布。 – 2014-12-02 19:34:07

回答

3

sizeof不給你一個動態分配的內存塊的大小。它給你指針的大小。