将字符串中的单词提取到动态二维字符数组中
Extracting words from a string into dynamic 2D char array
我有一个包含字符串的动态字符数组。我正在尝试将此字符串中的所有单词提取到动态二维字符数组中。这是我的代码:
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]
中?
至少一期。
尺寸计算不正确。
char **input_words_tokenized =
malloc((wordCount(input_words))*sizeof(char));
// wrong type ^--^
不是根据希望匹配的类型调整大小,而是根据引用类型调整大小。更容易正确编码、审查和维护。
char **input_words_tokenized =
malloc((wordCount(input_words)) * sizeof *input_words_tokenized);
// ^--------------------^
我有一个包含字符串的动态字符数组。我正在尝试将此字符串中的所有单词提取到动态二维字符数组中。这是我的代码:
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]
中?
至少一期。
尺寸计算不正确。
char **input_words_tokenized =
malloc((wordCount(input_words))*sizeof(char));
// wrong type ^--^
不是根据希望匹配的类型调整大小,而是根据引用类型调整大小。更容易正确编码、审查和维护。
char **input_words_tokenized =
malloc((wordCount(input_words)) * sizeof *input_words_tokenized);
// ^--------------------^