使用fgets +动态内存分配

时间:2012-10-30 07:04:18

标签: c fgets dynamic-memory-allocation

我有一个需要帮助的作业问题。我需要实现一个函数char *getStrFromFile(FILE*);。我只是不明白它。我试图弄清楚这个问题。

  

此函数可安全地从中读取未知长度的完整行   fpin指向的打开文件。它返回一条最多为CHUNKSZ-1的行   字符长度超过保持线所需的最小值。   它最初分配一个DEFLEN字符数组来保存字符串,   如果这个空间不足以容纳字符串,它将反复进行   创建一个更大的CHUNKSZ字符串,将旧字符串复制到它   释放旧字符串,然后从文件中读取更多字符,   并继续这一直到可以返回任意长度的整行。

     

RETURNS:如果fpin中没有留下任何字符,则为NULL,否则:   指向最多CHUNKSZ-1字符的分配数组的指针   从文件fpin中保留任意长行所必需的miminum

 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;

1 个答案:

答案 0 :(得分:5)

这不正确。

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

一定是

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