gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:35:11 26 4
gpt4 key购买 nike

您好,我正在创建一个函数,它将读取文本文件中的所有单词并将每个单词存储在数组中(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;

}

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

最佳答案

您需要这个(注意:这是最小的、非错误检查代码,仍有改进的空间)。

 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); 为每个单词分配内存。 +1 if 因为 NUL 字符串终止符。

在程序结束时,您应该像这样释放分配的内存:

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

关于c - 初始化文本文件并存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com