Извлечение слов из строки в массив динамических c 2D символов - PullRequest
2 голосов
/ 23 марта 2020

У меня есть массив Dynami c char, который содержит строку. Я пытаюсь извлечь все слова из этой строки в массив символов Dynami c 2d. Вот мой код:

int rows = 1;
char *input_words = malloc((rows)*sizeof(char)); 
input_words = lowerCase(getInputWords(MAX_LINE_LEN, input_file)); //retrieves a string of words
char **input_words_tokenized = malloc((wordCount(input_words))*sizeof(char)); 

for(i = 0; i < wordCount(input_words); i++) {
    input_words_tokenized[i] = malloc(MAX_KEY_LEN*sizeof(char)); 
}


char *t = strtok(input_words, " ");
j = 0;
while(t) {
    for(i = 0; i < strlen(t); i++) {
        strcpy(&input_words_tokenized[j][i], &t[i]);
        printf("%c", input_words_tokenized[j][i]);
    }
    j++;

    t = strtok(NULL, " ");
}

В моем выводе input_words_tokenized[j][i] содержит только первое слово или токен из input_words. Почему оставшиеся слова не маркируются и не сохраняются в input_words_tokenized[j][i]?

1 Ответ

1 голос
/ 23 марта 2020

По крайней мере, одна проблема.

Неправильный расчет размера.

char **input_words_tokenized = 
    malloc((wordCount(input_words))*sizeof(char));
    // wrong type                          ^--^

Вместо определения размера, который, как мы надеемся, соответствует типу, размер к указанному типу. Проще кодировать правильно, просматривать и поддерживать.

char **input_words_tokenized = 
    malloc((wordCount(input_words)) * sizeof *input_words_tokenized);
    //                                       ^--------------------^
...