Page 162 - C-Language
P. 162

{
             /* Increment our line count */
             line_count++;

             /* Show the line details */
             printf("line[%06d]: chars=%06zd, buf size=%06zu, contents: %s", line_count,
                 line_size, line_buf_size, line_buf);

             /* Get the next line */
             line_size = getline(&line_buf, &line_buf_size, fp);
           }

           /* Free the allocated line buffer */
           free(line_buf);
           line_buf = NULL;

           /* Close the file now that we are done with it */
           fclose(fp);

           return EXIT_SUCCESS;
         }



        Input file example.txt


         This is a file
           which has
         multiple lines
             with various indentation,
         blank lines



         a really long line to show that getline() will reallocate the line buffer if the length of a
         line is too long to fit in the buffer it has been given,
           and punctuation at the end of the lines.



        Output


         line[000001]: chars=000015, buf size=000016, contents: This is a file
         line[000002]: chars=000012, buf size=000016, contents:   which has
         line[000003]: chars=000015, buf size=000016, contents: multiple lines
         line[000004]: chars=000030, buf size=000032, contents:     with various indentation,
         line[000005]: chars=000012, buf size=000032, contents: blank lines
         line[000006]: chars=000001, buf size=000032, contents:
         line[000007]: chars=000001, buf size=000032, contents:
         line[000008]: chars=000001, buf size=000032, contents:
         line[000009]: chars=000150, buf size=000160, contents: a really long line to show that
         getline() will reallocate the line buffer if the length of a line is too long to fit in the
         buffer it has been given,
         line[000010]: chars=000042, buf size=000160, contents:  and punctuation at the end of the
         lines.
         line[000011]: chars=000001, buf size=000160, contents:


        In the example, getline() is initially called with no buffer allocated. During this first call, getline()
        allocates a buffer, reads the first line and places the line's contents in the new buffer. On
        subsequent calls, getline() updates the same buffer and only reallocates the buffer when it is no



        https://riptutorial.com/                                                                             138
   157   158   159   160   161   162   163   164   165   166   167