C将文件中的单词存储到动态分配的数组中,存储不正确



如果我正在动态分配一个指向字符(字符串(的指针数组。为什么我不能像array[i] = wordarray[i] = *word那样将*字的内容放在数组中的给定位置。

我想将文件中的单词拆分并存储到一个动态分配的数组中。这是正确的方向还是通过2D阵列完成的。

int main(int argc, char *argv[]) {
FILE *file = fopen(argv[1], "r");
fseek(file, 0, SEEK_END);
size_t size = ftell(file);
fseek(file, 0, SEEK_SET);
char *array = malloc(size * sizeof(char)+10);
char *array2 = malloc(size * sizeof(char)+10);
fread(array, 1, size, file);
array[size] = '';
char *word;
word = strtok (array, " ,.-");
int i = 0;
while (i <= 9 && word != NULL ){
for(i = 0; i < 10; i++) {
array[i] = *word;
strcpy(&array2[i], word);
word = strtok (NULL, " ,.-");
}
fclose(file);
}
for (i = 0; i < 10; ++i)
printf("array[%d] = %cn", i, array2[i]);
free(array);
free(array2);
fclose(file);
return 0;
}

要阅读的文本。

This free test evaluates how well you understand what you

电流输出

array2[0] = T
array2[1] = f
array2[2] = t
array2[3] = e
array2[4] = h
array2[5] = w
array2[6] = y
array2[7] = u
array2[8] = w
array2[9] = y

我想要什么。

array2[0] = The
array2[1] = free
array2[2] = test
array2[3] = evaluates
array2[4] = how 
array2[5] = well
array2[6] = you
array2[7] = understand
array2[8] = what
array2[9] = you

您需要两个不同的阵列

第一个是读取数据的缓冲区-让我们称之为"缓冲区",它是一个字符*

第二个是指向"字符串"的指针数组-让我们调用"words"它是一个字符**

int main(int argc, char* argv[]) {
FILE* file = fopen("dict.txt", "r");
fseek(file, 0, SEEK_END);
size_t size = ftell(file);
fseek(file, 0, SEEK_SET);
char* buffer = malloc(size * sizeof(char) + 10);
char** words = malloc(sizeof(char*) *  10);
fread(buffer, 1, size, file);
buffer[size] = '';
char* word;
word = strtok(buffer, " ,.-");
int i = 0;
while (i <= 9 && word != NULL) {
for (i = 0; i < 10; i++) {
words[i] = word;
word = strtok(NULL, " ,.-");
}
fclose(file);
}
for (i = 0; i < 10; ++i)
printf("array[%d] = %sn", i, words[i]);
free(buffer);
free(words);
fclose(file);
return 0;
}

我将对完全缺乏测试来检查是否有任何效果发表评论,PLus我已经很难说出10个单词了——因为你似乎已经在循环中做到了。

还要注意,如果"words"数组中充满了指向"buffer"的指针。如果您删除或更改"缓冲区","单词"将被插入

最新更新