簡體   English   中英

C 將文件中的單詞存儲到動態分配的數組中,存儲不正確

[英]C Store words from a file into a Dynamic allocated array, not storing correctly

如果我動態分配一個指向字符(字符串)的指針數組。 為什么我不能將 *word 的內容放在數組中給定的 position 中,就像這樣array[i] = wordarray[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM