Dynamic String Input - The GNU C Library

Next: Other Input Conversions, Previous: String Input Conversions, Up: Formatted Input

#### 12.14.6 Dynamically Allocating String Conversions

A GNU extension to formatted input lets you safely read a string with no maximum size. Using this feature, you don't supply a buffer; instead, `scanf` allocates a buffer big enough to hold the data and gives you its address. To use this feature, write ‘`a`’ as a flag character, as in ‘`%as`’ or ‘`%a[0-9a-z]`’.

The pointer argument you supply for where to store the input should have type `char **`. The `scanf` function allocates a buffer and stores its address in the word that the argument points to. You should free the buffer with `free` when you no longer need it.

Here is an example of using the ‘`a`’ flag with the ‘`%[...]`’ conversion specification to read a “variable assignment” of the form ‘`variable = value`’.

         {
           char *variable, *value;

           if (2 > scanf ("%a[a-zA-Z0-9] = %a[^\n]\n",
                          &variable, &value))
             {
               invalid_input_error ();
               return 0;
             }

           ...
         }