【问题标题】:Extracting words from a string into dynamic 2D char array将字符串中的单词提取到动态二维字符数组中
【发布时间】:2020-07-03 11:50:43
【问题描述】:

我有一个包含字符串的动态 char 数组。我正在尝试将此字符串中的所有单词提取到动态二维字符数组中。这是我的代码:

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]

【问题讨论】:

    标签: c string multidimensional-array tokenize dynamic-arrays


    【解决方案1】:

    至少一个问题。

    尺寸计算不正确。

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

    不是根据希望匹配的类型调整大小,而是根据引用的类型调整大小。更容易正确编码、审查和维护。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多