2015-09-27 25 views
0

我正在研究一個項目,我試圖讀取一個CSV文件並檢查它是否有各種不同的參數。 C對我來說是一種新的語言,所以我仍然習慣它,並且我的代碼可能不像它那樣精簡。無論如何,我的問題是這樣的:當我讀取文件以確保每行都具有相同數量的條目時,它可以正常工作,但是當我嘗試將這些值放入二維數組中時,一切都會變得混亂。 arr [0] [0]的值應該是CSV文件中的第一個值,但是當我打印出來看它是什麼時,它始終是最後一行中的第一個值。我不能爲我的生活弄清楚這一點,我一直在看這個代碼,並修改它幾個小時。任何幫助將非常感激!如何使用字符串(char *)從CSV文件在C中填充二維數組C

int parseFile(int width, int height, char*fileName) { 

char*** matrix = malloc(width*height*sizeof(char*)); 
int counter = 0; 
int pointer = 0; 
FILE *file = fopen(fileName, "r"); 
const size_t line_size = 1024; 
char* line = (char*) malloc(line_size); 

while (fgets(line, line_size, file) != NULL) { 
    char** data = malloc(width*sizeof(char*)); 
    char *delim = ","; 
    char *string = strtok(line, delim); 
    while (string != NULL) { 
     size_t ln = strlen(string) - 1; 
     if (string[ln] == '\n') { 
      string[ln] = '\0'; 
     } 
     data[counter] = string; 

     string = strtok(NULL, delim); 
     counter++; 
    } 
    matrix[pointer] = data; 
    counter = 0; 
    pointer++; 
} 
printf("%s", matrix[0][0]); 
return 0; 

}

+1

'炭結果***矩陣= malloc的(寬度×高度×的sizeof(char)的);'...氣味犯規。 –

+0

你是什麼意思?即使我將所有字符串存儲在單個數組中,每當有新行時,它都會覆蓋第一個條目。 –

+0

哎呦,原來是printf(「%s」,matrix [0] [0]);但我正在做一些測試,並忘記將其改回。我編輯了上面的代碼以獲得正確的打印語句。 –

回答

0

這看起來接近直角,而是正在發生的事情是strtok返回一個指針到線。這意味着它只有最後一行的副本。

考慮每一行創建一個新的存儲器插槽,或strdupstrtok

+0

就像一個魅力一樣工作。 –