0
我正在处理这样一个问题,即我有一个包含行单词的输入文件,并且我想要用3D数组逐行存储所有单词。但是我的代码似乎有些问题,我认为我无法看到分段错误发生的位置。这里是我的代码:为了澄清:在3D上读取行和存储单词的单词
“字符*输入” 是名 | “MAX_WORDS”是一个宏,相当于 | “MAX_WLENGTH”是另一个宏,相当于。
void func(char *input){
FILE *fp;
fp = fopen(input, "r");
char buffer[MAX_WORDS][MAX_WORDS][MAX_WLENGTH];
if(fp != NULL){
int c;
size_t i = 0;
size_t x = 0;
size_t y = 0;
for(;;){
c = fgetc(fp);
if(c != EOF && c != '\n' && c != ' '){
if(i < MAX_WLENGTH -1){
buffer[y][x][i++] = c;
}
continue;
}
if (i > 0){
buffer[y][x][i] = '\0';
if(c == '\n'){
y++;
x = 0;
i = 0;
}
else if(c == ' '){
x++;
i = 0;
}
}
if(c == EOF){
break;
}
}
fclose(fp);
}
int i;
int j;
for(i = 0; i < MAX_WORDS; ++i){
printf("\n");
for(j=0; j < MAX_WORDS; ++j){
printf("%s\t", strdup(buffer[i][j]));
}
}
}
'char buffer [MAX_WORDS] [MAX_WORDS] [MAX_WLENGTH];'堆栈太大。 – BLUEPIXY
@BLUEPIXY谢谢。 –
3D数组是一个糟糕的主意。使用结构的动态数组可以更好地服务,其中结构将表示每行,并包含指向行中每个单词的*指针指向char *的指针。 (或者如果每行有合理的最大字数,则可以使用简单的指针数组作为结构成员)。无论哪种方式,你可以分配在每个单词的基础上,这将比尝试使用3D字符数组更高的内存效率(你已经发现,即使是相对较少数量的行和每行字数也会快速超过堆栈大小) –