0

我有一个需要帮助的家庭作业问题。我需要实现一个功能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;
4

1 回答 1

5

这是不正确的。

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

肯定是

if(string[l-1] == '\n')
于 2012-10-30T07:45:34.203 回答