C 扫描文件中的单词并将其保存在数组中

C 扫描文件中的单词并将其保存在数组中,c,arrays,memory,memory-leaks,C,Arrays,Memory,Memory Leaks,我试图扫描文本文件中的单词,然后将它们保存在一个数组中,以便找到唯一的单词对(这就是为什么我在这里有结构)。这只是我正在做的任务的一部分 我一直遇到的唯一错误是这一行: char* words[i] = malloc ( 10000 *sizeof (char)); 错误是:可变大小的对象可能未初始化 我不知道如何解决这个问题 #include <stdio.h> #include <stdlib.h> #include <string.h> #incl

我试图扫描文本文件中的单词,然后将它们保存在一个数组中,以便找到唯一的单词对(这就是为什么我在这里有结构)。这只是我正在做的任务的一部分

我一直遇到的唯一错误是这一行:

  char* words[i] = malloc ( 10000 *sizeof (char));
错误是:可变大小的对象可能未初始化

我不知道如何解决这个问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define true 1
#define false 0

typedef struct {
    char word1 [50];
    char word2 [50];
    int frequency;
} pairs;

int main(int argc, char** argv) {
    int i;
    int x;
    int boolean = 1;
    int count = 0;
    FILE* f = fopen (argv[1], "r");

    while ( boolean != EOF) {
        char* words[i] = malloc (1000000 * sizeof (char));
        boolean = fscanf( f, "%s", words[i]);
        i++;


        for (x=0; x< i; x++) {
            printf ("%s", words[i]);
        }
        free(words[i]);
    } 
    fclose(f);
}
#包括
#包括
#包括
#包括
#定义真1
#定义false 0
类型定义结构{
char-word1[50];
char-word2[50];
整数频率;
}成对的;
int main(int argc,字符**argv){
int i;
int x;
int布尔=1;
整数计数=0;
文件*f=fopen(argv[1],“r”);
while(布尔值!=EOF){
char*words[i]=malloc(1000000*sizeof(char));
布尔值=fscanf(f,“%s”,字[i]);
i++;
对于(x=0;x
问题在于
单词[i]
的大小是可变的,因为变量
i
。因此
char*words[i]=malloc(10000*sizeof(char)),因为如果i,即
i
超过分配的内存,这将导致内存损坏,这是编译器禁止的。您可以使用
char*words[10000]=malloc(10000*sizeof(char))
字符字[]={a,b,…}无任何动态内存分配(编译器使用列表分配内存)

char单词[]但是
字符词[]={a,b,…}与初始化列表一起工作

解决方案是将指针
malloc()
类型转换为
int

char *words;
words = (int *)malloc(10000*sizeof(char)); 

查看此

此代码有太多错误,以至于很难知道从何处开始
i
是一个未初始化的变量,那么您认为
char*words[i]
有什么作用?您能解释
10000
1000000
的意义吗,为什么要为每行创建一个新数组,而不是为每行添加一个数组?@M.M我要做的是扫描文件中的单词,将这些单词保存在数组中,并为该数组分配内存。它只是为数组中的字分配内存的一个随机大数字。我是否误解了这里的任何步骤?您应该在循环之前创建数组。当前,您在循环中创建它,因此它在每个循环迭代结束时停止存在。然后在读取下一行时创建一个新数组,依此类推;出现错误:初始值设定项无效。我尝试了char words[],但出现了很多错误,包括数组大小丢失。
char words[10000]=malloc…
是一个错误,就像
char words[]一样
@M.M那么你有什么建议呢?还没有,OP的任务有很多可能的方法,但没有一种类似于目前发布的代码。