2014-12-02 3 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' не дает вам размер динамически выделенного блока памяти. Он дает размер указателя. –

+0

Спасибо! Я не могу поверить, что это так! – bmpasini

+0

@DarkFalcon: Вы должны отправить это как ответ. –

ответ

3

sizeof не дает вам размер динамически выделенного блока памяти. Он дает размер указателя.

Смежные вопросы