大家好,我正在做一个与我的课程相关的C项目。我需要定义一个动态数组来保存单词,单词数可能非常大,为700万,但字长最多为100个字符。我创建了动态数组:
char (*words)[1001];
words = (char (*)[1001]) malloc(sizeof(*words));
我正在为这个数组添加单词:
while(!feof(mergefile))
{
if (EOF!=fscanf(mergefile,"%s",word)){
strcpy(words[index] , word);
index++;
}
}
但是当我尝试添加许多单词时,我会遇到分段错误。我的问题是,我怎样才能正确创建这个数组来保存很多单词?
请帮助我,因为时间有限,谢谢..
答案 0 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char **words = malloc(7000000*sizeof(char*));
if(words){
FILE *mergefile = stdin;//mock
char word[100+1];
size_t index = 0;
while(!feof(mergefile)){
if(EOF!=fscanf(mergefile, "%100s", word)){
words[index]=malloc(strlen(word)+1);
if(words[index]==NULL){
puts("I can't continue ...\n");
exit(-1);
}
strcpy(words[index++], word);
}
}
words = realloc(words, index*sizeof(char*));
int i;
for(i=0;i<index;++i){
puts(words[i]);
free(words[i]);
}
free(words);
} else {
puts("I can't...\n");
}
return 0;
}
答案 1 :(得分:1)
似乎你试图声明words
是一个指向1001个字符串数组的指针,我认为这是在声明中给你带来麻烦的一部分。我建议改为以这种方式声明words
:
char **words;
words = malloc(number_of_words * sizeof(char *));
并将循环写入strdup
每个单词而不是strcpy
:
while(!feof(mergefile))
{
if (EOF!=fscanf(mergefile,"%s",word)){
words[index] = strdup(word);
index++;
}
}