我正在編寫一個程序,它正在做一件簡單的任務;逐行讀取一個文件,解析它,並將結果存儲到一個數組中,其中結構爲array [lineNumber] [lineElement]。除了我遇到的一個奇怪的問題之外,它的大部分工作都很有效。數組結果在while循環內是正確的,但在其外部破壞
在下面的代碼中,對數組進行訪問的數組只包含填充它的while循環的外部數據,只返回最後一個條目。無論lineNumber的關鍵是什麼都會發生。基本上它就像覆蓋一樣,儘管在while循環內它可以很好地訪問。我認爲只有兩個項目可能會出錯,我用粗體略述,儘管對於char * processData [100];,它不應該是一個問題,因爲它存儲在一個聲明在while循環之外的數組中(如果我記得正確的while循環不應該有範圍?),而另一行** char ** processArray [100] ; **,它可能是指針數組的雙星,但將它返回給一顆星則會引發一連串的錯誤,即前面提到的數組結構完全中斷。
所以簡而言之,不是以任何方式成爲C專家,並且耗盡我的資源來解決這個問題,我想知道這裏的C編碼人員是否可以提供一些關於發生了什麼事情的建議,以及如何獲得這要按預期工作......如果我能的話。
如前所述,代碼。
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
FILE *ifp;
char line[80];
int returnValue = 0;
//Open file
ifp = fopen("dataFile", "rt");
if (ifp == NULL) {
fprintf(stderr, "Can't open input file!\n");
returnValue = 1;
}
int lineCounter = 0;
char **processArray[100];
while(fgets(line, 80, ifp) != NULL) {
char *processData[100];
char *p = strtok(line, " ,\n");
int keyCounter = 0;
while (p != NULL) {
processData[keyCounter] = p;
p = strtok(NULL, " ,\n");
keyCounter++;
}
processArray[lineCounter] = processData;
printf("%d\n", lineCounter);
printf("Inside -> %s\n", processArray[0][0]);
lineCounter++;
}
printf("Outside %s\n", processArray[0][0]);
fclose(ifp);
int i;
int j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%d-%d => %s\n ", i, j, processArray[i][j]);
}
}
return returnValue;
}
每次通過外循環時,你會在你的'line []'數組中讀入一行,覆蓋之前的內容。但前一行的指針集仍然指向該數組。您可能要調用'malloc'來爲每行文本分配一個全新的數組。 –