0

助けが必要な宿題の問題があります。関数を実装する必要がありますchar *getStrFromFile(FILE*);。私は単にそれを理解していません。私は質問を理解しようとしました。

この関数は、fpin が指す開いているファイルから長さが不明な行全体を安全に読み取ります。行を保持するために必要な最小長よりも多くても CHUNKSZ-1 文字の長さの行を返します。最初に文字列を保持するために DEFLEN 文字の配列を割り当てます。このスペースが文字列を保持するのに不十分な場合は、CHUNKSZ より大きい新しい文字列を繰り返し作成し、古い文字列をコピーして古い文字列を解放し、次に読み取ります。ファイルからより多くの文字で、任意の長さの行全体が返されるまでこれを続けます。

戻り値: fpin に文字が残っていない場合は NULL、それ以外の場合: ファイル fpin からの任意の長さの行を保持するために必要な最小値よりも多くても CHUNKSZ-1 文字の長さの、割り当てられた配列へのポインター

 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 に答える