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))无法使用code>,因为如果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的任务有很多可能的方法,但没有一种类似于目前发布的代码。