您好我正在创建一个函数,它将读取文本文件中的所有单词并将每个单词存储在一个数组中(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;
}
我不明白复制数组中的单词有什么问题。请帮忙!非常感谢你!
答案 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);