【发布时间】:2022-01-27 01:49:38
【问题描述】:
所以我有一个程序,我需要读取一个文件并将其中的一些单词存储在一个数组中,但我想这样做,以便在我存储各个单词的每个数组中根据如何自定义大小我有很多话
typedef struct {
char* keyword;
int keywordCount;
int stdev;
} keywordData;
int keywordNumber;
keywordData* keyword;
void fetchKeywords(const char* filename)
{
FILE* keywords = fopen(filename, "r");
// first number in the file is the number of keywords in the file, so i dont need to count them
fscanf(keywords,"%d", &keywordNumber);
keyword = (keywordData *) malloc(keywordNumber * sizeof(keywordData));
for(int i = 0; i < keywordNumber; i++)
{
fscanf(keywords,"%s", keyword[i].keyword);
//printf("%s\n", keyword[i].keyword);
}
}
【问题讨论】:
-
fscanf(keywords,"%s", keyword[i].keyword);调用未定义的行为。keyword[i].keyword是一个不确定的指针,它后面没有为您的存储保留的内存。 -
为什么
keyword是指针而不是数组? -
@Barmar 来自在线示例,这就是我看到其他人为结构类型数组分配内存的方式
-
@WhozCraig 那么我如何分配内存用于存储?
-
如果大小可以变化,则使用指针。但是如果你使用
scanf(),你需要先为字符串分配一个缓冲区,所以它永远不会大于你分配的缓冲区。您不妨声明一个具有该长度的字符串。