如何在c语言中重写文本文件中的词频计数器程序?

如何在c语言中重写文本文件中的词频计数器程序?,c,segmentation-fault,full-text-search,C,Segmentation Fault,Full Text Search,我们看到了计算文本文件中每个单词出现频率的程序。经过一些小的修改后,它可以完美地处理足够小的文件。我想将其用于大型文本文件,但出现了一个错误“分段错误”。原因是存在数组的初始化 char p[1000][512], 这对于大文本来说太小了(如果我理解正确的话,它只能保存1000个单词(通常可能是一致的))。如果我试图扩大p的维数,我也会得到这个错误(我的计算机上不能有大于2000*2000的数组) 是否可以修改上述代码以打开大型文本文件?如果是,怎么做?您可以编写修改它的代码吗?考虑使用m

我们看到了计算文本文件中每个单词出现频率的程序。经过一些小的修改后,它可以完美地处理足够小的文件。我想将其用于大型文本文件,但出现了一个错误“分段错误”。原因是存在数组的初始化

 char p[1000][512], 
这对于大文本来说太小了(如果我理解正确的话,它只能保存1000个单词(通常可能是一致的))。如果我试图扩大p的维数,我也会得到这个错误(我的计算机上不能有大于2000*2000的数组)


是否可以修改上述代码以打开大型文本文件?如果是,怎么做?您可以编写修改它的代码吗?

考虑使用
malloc
在头部分配数组

当您像char
charp[1000][512]
那样声明数组时,它会在堆栈上分配512*1000(约512 Kb)。堆栈大小不足以容纳大文件。当您使用malloc分配内存时,您要求操作系统在堆中为您提供一些额外的内存

因此,您应该像

typedef char * string_t;
string_t * stringsArray = malloc(sizeof(string_t) * NUM_STRINGS_TO_ALLOCATE);
for (size_t i = 0; i < STRINGS_COUNT; ++i)
   stringsArray[i] = malloc(sizeof(char) * NUM_CHARS_PER_STRING);

唯一正确的答案是“是”。你在网站规则中有什么特别的问题吗?@Olaf:我已经重写了这个问题。你似乎把这个网站和“给我一个密码”网站混淆了。对不起,找错地方了。(是的,我可以重写代码)。开始修复程序的缩进。
for (size_t i = 0; i < STRINGS_COUNT; ++i)
   free(stringsArray[i]);
free(stringsArray);