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字符數組更高的內存效率(你已經發現,即使是相對較少數量的行和每行字數也會快速超過堆棧大小) –