[英]C Store words from a file into a Dynamic allocated array, not storing correctly
如果我動態分配一個指向字符(字符串)的指針數組。 為什么我不能將 *word 的內容放在數組中給定的 position 中,就像這樣array[i] = word
或array[i] = *word
。
我想將文件中的單詞拆分並存儲到動態分配的數組中。 這是正確的方向還是通過二維數組完成的。
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] = '\0';
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] = %c\n", i, array2[i]);
free(array);
free(array2);
fclose(file);
return 0;
}
要閱讀的文本。
This free test evaluates how well you understand what you
當前 output
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
你需要兩個不同的 arrays
第一個是您將數據讀入的緩沖區 - 讓我們稱之為“緩沖區”,它是一個 char*
第二個是指向“字符串”的指針數組 - 讓我們稱其為“單詞”是一個字符**
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] = '\0';
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] = %s\n", i, words[i]);
free(buffer);
free(words);
fclose(file);
return 0;
}
我將評論完全缺乏測試來檢查是否有任何工作,再加上我很難說到 10 個字——因為你似乎已經在循環中完成了。
另請注意,如果“單詞”數組中充滿了指向“緩沖區”的指針。 如果您刪除或更改“緩沖區”,“單詞”將被禁用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.