初始化文本文件并存储在数组中

时间:2017-03-24 07:29:14

标签: c arrays

您好我正在创建一个函数,它将读取文本文件中的所有单词并将每个单词存储在一个数组中(WordA [])。这是我的代码:

#include <stdio.h>
#include <string.h>
#include "dictionary.h" 
void
InitializeWords(char *WordA[])
{
    char word[31];
    int i;
    FILE *filep;

    filep = fopen("bacon.txt", "r");

    if (fp != NULL) { // means that file exists 
        for (i=0; i<NWORDS; i++){
          fscanf(filep, "%s", word);
          strcpy(WordA[i], word);
       }
       fclose(filep);
    }

}

将在WordA[]中初始化的单词将在我的程序的后半部分中使用。我已经跟踪了我的错误,显然当我删除strcpy (WordA[i], word)时,这些单词似乎正在打印/正确读取。

在主函数中调用

InitializeWords

int
main()
{
    char *WordA[NWORDS]; // a 1D array of character pointers (addresses)

    InitializeWords(WordA); 
    StartGame(WordA);  // starts the program game

    return 0;   

} 

我不明白复制数组中的单词有什么问题。请帮忙!非常感谢你!

1 个答案:

答案 0 :(得分:0)

你需要这个(注意:这是最小的,非错误检查代码,仍然有改进的余地)。

 for (i = 0; i<NWORDS; i++) {
   fscanf(filep, "%30s", word);
    WordA[i] = malloc(strlen(word) + 1);  // <<<< added this line
    strcpy(WordA[i], word);
 }

WordA是一个未初始化的指针数组。因此,您需要使用malloc(strlen(word) + 1);为每个单词分配内存。如果因为NUL字符串终止符,则为+1。

在程序结束时,您应该释放分配的内存,如下所示:

void FreeWords(char *WordA[])
{
  int i;
  for (i = 0; i<NWORDS; i++) {
    free(WordA[i]);
  }
}
...
FreeWord(WordA);