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

时间:2016-04-08 02:22:04

标签: c arrays memory memory-leaks

我正在尝试扫描文本文件中的单词,然后将它们保存在一个数组中,以便找到唯一的单词对(这就是我在这里结构化的原因)。这只是我正在进行的任务的一部分。

我唯一得到的错误就是这一行:

  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 个答案:

答案 0 :(得分:-1)

问题是由于变量words[i]i的大小可变。因此,char* words[i] = malloc ( 10000 *sizeof (char));不能使用,因为如果i超过分配的内存,这将导致内存损坏,编译器禁止。您必须使用char* words[10000] = malloc ( 10000 *sizeof (char));char words[] = {a,b,...};而不进行任何动态内存分配(编译器使用列表分配内存)

不是char words[];,但char words[]={a,b,...};初始化列表有效

解决方案是将指针malloc()返回到int

进行类型转换
char *words;
words = (int *)malloc(10000*sizeof(char)); 

请参阅 https://www.cs.swarthmore.edu/~newhall/unixhelp/C_arrays.html#dynamic2D