2014-12-02 214 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不给你一个动态分配的内存块的大小。它给你指针的大小。