The GNU C Library - Dynamic String Input

Node: Dynamic String Input Next: Other Input Conversions Prev: String Input Conversions Up: Formatted Input

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


Next: Other Input Conversions Up: Formatted Input