我正在尝试扫描文本文件中的单词,然后将它们保存在一个数组中,以便找到唯一的单词对(这就是我在这里结构化的原因)。这只是我正在进行的任务的一部分。
我唯一得到的错误就是这一行:
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);
}
答案 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