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