簡體   English   中英

使用fgets +動態內存分配

[英]Using fgets + dynamic memory allocation

我有一個家庭作業問題,需要幫助。 我需要實現一個功能char *getStrFromFile(FILE*); 我只是不明白。 我試圖找出問題所在。

此函數從fpin指向的打開文件中安全地讀取未知長度的完整行。 它返回的一行最多比保留該行所需的最小字符長CHUNKSZ-1個字符。 它最初分配一個DEFLEN字符數組來容納該字符串,並且如果此空間不足以容納該字符串,它將迭代創建一個更大的CHUNKSZ的新字符串,將舊字符串復制到其中以釋放舊字符串,然后讀取從文件中輸入更多字符,然后繼續執行此操作,直到可以返回整行的任意長度。

返回值:如果fpin中沒有剩余字符,則為NULL,否則:指向分配的數組的指針最多CHUNKSZ-1個字符,其長度比保留文件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;

這是不正確的。

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

一定是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM