Dynamic String Input (The GNU C Library)

#### 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;
        }

      ...
    }