2012-10-30 138 views
0

我有我需要幫助的作業問題。我需要實現一個功能char *getStrFromFile(FILE*);。我只是不明白它。我試圖找出這個問題。使用fgets +動態內存分配

該函數安全地從fpin指向的打開文件 中讀取一條未知長度的完整行。它返回一個最多隻能容納該行的字符長度最多的字符。 它最初分配一個DEFLEN字符數組來保存字符串 ,如果這個空間不足以容納字符串,它將迭代地 創建一個新的字符串,即CHUNKSZ更大,將舊字符串複製到它 釋放舊字符串,然後從文件 中讀取更多字符並繼續執行,直到可以返回任意長度的整行。

返回值:NULL,如果沒有字符被留在fpin,否則: 指針分配數組至多CHUNKSZ-1個字符長於 miminum需要保持從文件中的任意長的線fpin

int main(int nargs, char *args[]) 
{ 
    FILE *fpin; 
    char *getStrFromFile(FILE*); 
    if (nargs != 2) 
    { 
     fprintf(stderr, "USAGE: %s <file>\n", args[0]); 
     exit(1); 
    } 
    fpin = fopen(args[1], "r"); 
    while(1) 
    { 
     char *ln; 
     ln = getStrFromFile(fpin); 
     if (!ln) 
      break; 
     printf("%s", ln); 
     free(ln); 
    } 
    fclose(fpin); 
    return(0); 
} 

這是我必須使用的主要方法。這是我迄今所知道的。

char *getStrFromFile(FILE *fpin) 
{ 
    char string[DEFLEN]; 
    if(fgets(string, CHUNKSZ, fpin) != NULL) { 
    int l = lstr(string); 
    if(string[l-1] = '\n') { 
     return string; 
    } else { 
     int size = 1; 
     int end = 0; 
     while (string[l-1] != '\n') { 
     size += CHUNSZ; 
     char *s2 = (char*)malloc(sizeof(char)+size); 
     for(i = 0+end; i < lstr(string); i++) { 
      s2[i] = string[i]; 
     } 
     end += lstr(string); 
     fgets(string, size + end, fpin); 
     return s2; 
+0

哪一部分你不明白嗎? –

+0

'你知道嗎?'是什麼意思?您向我們展示了一些截斷的源代碼。 –

+0

此代碼不起作用。我需要迭代地使用fgets。 CHUNSZ和DEFLEN都是cpp宏定義爲1. – user1784688

回答

5

這是不正確的。

if(string[l-1] = '\n') 

它必須是

if(string[l-1] == '\n')