2017-09-19 55 views
-1
char *arr[512][lineCount]; 
while(lineCount > 0){  
    char *savedLine = malloc(512); 
    while(1){ 
    fread(savedLine, 1, 1,fd); 
    if(savedLine != '\n'){ 
     arr = savedLine; 
    }else{ 
     break; 
    } 
    }lineCount --; 
} 

所以我試圖創建一個逐行存儲字符的2D字符數組。 我不允許使用fgets,因此我一次使用fread存儲一個字符,直到達到'\n'。但它不會編譯,說我無法比較指針和整數(savedLine != 'n'),並且數組類型不可分配(char *arr[512][lineCount])。其餘的變量在我的代碼中聲明。如何使用fread將char保存到我的二維數組?

+0

這些尺寸看起來特別混亂。這不應該是char指針數組的數組。如果有的話它應該是指向char的VLA。也就是說,我首先將'char * arr [512] [lineCount];'改成'char * arr [lineCount];'。我也有一個升序計數器,從零開始,在建立你的列表的同時對'arr'進行索引。最後,[fgets](http://en.cppreference.com/w/c/io/fgets)可能更適合每行工作。 – WhozCraig

+0

啓用編譯器警告.'savedLine!='\ n''應警告以及其他人:比較指針與字符常量。 – chux

回答

1

您沒有二維數組字符,您有二維數組指針,並且您從未將任何內容指定給這些指針。但是你根本不需要指針。只需聲明一個char變量並將其讀入其地址,然後將其複製到數組中。

char arr[lineCount][512]; 
int pos = 0; 
while (lineCount > 0) { 
    char tempChar; 
    size_t n = fread(&tempChar, 1, 1, fd); 
    if (n == 0) { // EOF or error 
     break; 
    } 
    if (tempChar == '\n') { 
     arr[lineCount-1][pos] = '\0'; // Add trailing null to current line 
     lineCount--; // Start new line 
     pos = 0; 
    } else { 
     arr[lineCount-1][pos] = tempChar; 
     pos++; 
     if (pos == 511) { // Filled up current line, start new line 
      arr[lineCount-1][pos] = '\0'; 
      lineCount--; 
      pos = 0; 
     } 
    } 
} 

注意,需要從lineCount減去1分配給數組的時候,因爲陣列索引從0到size-1。另請注意,您已向後聲明瞭該數組。

+0

不記錄每個'arr []'的使用量。也許在結束,如果行EOF的''\ 0'? – chux

+0

非常感謝你的工作! – geronimo

+0

@chux謝謝,解決了。 – Barmar

相關問題