vsscanf() — Read Formatted Data

Format

#include <stdarg.h>
#include <stdio.h>
int vsscanf(const char *buffer, const char *format, va_list arg_ptr);

Language Level: ANSI

Threadsafe: Yes.

Locale Sensitive: The behavior of this function might be affected by the LC_CTYPE and LC_NUMERIC categories of the current locale. The behavior might also be affected by the LC_UNI_CTYPE category of the current locale if LOCALETYPE(*LOCALEUCS2) or LOCALETYPE(*LOCALEUTF) is specified on the compilation command. For more information, see Understanding CCSIDs and Locales.

Description

The vsscanf() function reads data from a buffer into locations specified by a variable number of arguments. The vsscanf() function works just like the sscanf()function, except that arg_ptr points to a list of arguments whose number can vary from call to call in the program. These arguments should be initialized by va_start for each call. In contrast, the sscanf() function can have a list of arguments, but the number of arguments in that list is fixed when you compile the program.

Each argument must be a pointer to a variable with a type that corresponds to a type specifier in format-string. The format has the same form and function as the format string for the scanf() function.

Return Value

The vsscanf() function returns the number of fields that were successfully converted and assigned. The return value does not include fields that were read but not assigned. The return value is EOF for an attempt to read at end-of-file if no conversion was performed. A return value of 0 means that no fields were assigned.

Example that uses vsscanf()

This example uses vsscanf() to read various data from the string tokenstring and then displays that data.

#include <stdio.h>
#include <stdarg.h>
#include <stddef.h>

int vread(const char *buffer, char *fmt, ...)
{
	int rc;
	va_list arg_ptr;
	va_start(arg_ptr, fmt);
	rc = vsscanf(buffer, fmt, arg_ptr);
	va_end(arg_ptr);
	return(rc);
}
int main(void)
{
	char *tokenstring = "15 12 14";
	wchar_t * idestring = L"ABC Z";
	wchar_t ws[81];
	wchar_t wc;
	int i;
	float fp;
	char s[81];
	char c;
	/* Input various data */
	/* In the first invocation of vsscanf, the format string is */
	/* "%s %c%d%f". If there were no space between %s and %c, */
	/* vsscanf would read the first character following the */
	/* string, which is a blank space. */
	vread(tokenstring, "%s %c%d%f", s, &c, &i, &fp);
	vread((char *) idestring, "%S %C", ws,&wc);
	/* Display the data */
	printf("\nstring = %s\n",s);
	printf("character = %c\n",c);
	printf("integer = %d\n",i);
	printf("floating-point number = %f\n",fp);
	printf("wide-character string = %S\n", ws);
	printf("wide-character = %C\n", wc);
}
/***************** Output should be similar to: *****************
string = 15
character = 1
integer = 2
floating-point number = 14.000000
wide-character string = ABC
wide-character = Z
*******************************************************************/

Related Information



[ Top of Page | Previous Page | Next Page | Contents | Index ]