C sprintf() function
C library function - sprintf()
The sprintf() function is used to print formatted data to buffer. Any argument-list is converted and put out according to the corresponding format specification in the format-string.
Syntax:
int sprintf(char *buffer, const char *format-string, argument-list)
Parameters:
| Name | Description | 
|---|---|
| str | Pointer to a buffer where the resulting string is stored. | 
| format | The format argument is a string containing C language conversion specifications. The conversion specification specifies the notation, alignment, significant digits, field width, and other aspects of the output format. To represent non-printing characters, such as newlines and tabs, the format string may contain escape characters. Below are the details. | 
| additional argument-list | Depending on the format string, the function may require additional arguments. | 
Format strings specify notation, alignment, significant digits, field width, and other aspects of output formats. It can contain ordinary alphanumeric characters; along with escape characters, conversion specifiers, and other characters. Format specifications are made up of a the percent sign (%) followed by one of the following conversion operators, which determine what printf does with its arguments.
Conversion Specifiers:
| Specifier | Description | 
|---|---|
| %% | Print a single % character | 
| %c | Convert an int to an unsigned character and print the resulting character | 
| %d or %i | Print an int as a signed decimal number | 
| %u | Print an unsigned as an unsigned decimal number | 
| %o | Print an unsigned as an unsigned octal number | 
| %x | Hexadecimal notation (using lowercase letters a-f) | 
| %X | Hexadecimal notation (using uppercase letters A-F) | 
| %e | Exponential notation (using a lowercase e as in 3.1415e+00) | 
| %E | Exponential notation (using an uppercase E as in 3.1415E+00) | 
| %f | Print a double using a decimal format like [-]ddd.ddd | 
| %g | The more compact of %e or %f, insignificant zeros do not print. | 
| %G | Same as g, but using an uppercase E | 
| %s | Print the string pointed to by a char * | 
| %p | Print a void * argument in hexadecimal (ANSI C only) | 
| %n | Store the number of characters printed at this point in the integer pointed to by the int * argument. Nothing is printed. (ANSI C only). | 
Conversion Flags:
You can control the alignment of the output using any of these optional flags.
| Flag | Format | Example | 
|---|---|---|
| + (plus) | Always prints a sign character (+ or -). | %+7.2d | 
| - (minus) | Left-justifies the converted argument in its field. | %-7.2d | 
| 0 (Zero) | Pad with zeros rather than spaces. | %07.2d | 
| # (hash) | Use an alternate form for the output. The effect differs depending on the conversion specifier. 
 | 
Conversion width and precision:
By including these options in the format string, you can control the width and precision of the output:
| Character | Description | Example | 
|---|---|---|
| Field width | A digit string specifying the minimum number of digits to be printed. | %5f | 
| Precision | A digit string including a period (.) specifying the number of digits to be printed to the right of the decimal point. | %5.2f | 
Some conversion operators may also be preceded by a size specification:
- h indicates that the argument associated with a d, i, o, u, x or X operator is a short or unsigned short.
- l indicates that the argument associated with a d, i, o, u, x or X operator is a long or unsigned long.
- L indicates that the argument associated with a e, E, f, g or G operator is a long double (ANSI C only)
Escape sequences in C:
An escape sequence is a series of characters that represents a special character. It begins with a backslash character (\), which indicates that the character(s) that follow the backslash character should be treated in a special way. C uses escape sequences within a format string to print certain special characters. For example \n moves the output position to the beginning of the next line. The following is a list of escape sequences.
| Escape sequence | Action | 
|---|---|
| \n | prints a new line | 
| \b | backs up one character | 
| \t | moves the output position to the next tab stop | 
| \\ | prints a backslash | 
| \" | prints a double quote | 
| \' | prints a single quote | 
Return value
- If successful, returns the number of bytes that are written in the array, not counting the ending null character.
Example: sprintf() function
Following example uses sprintf() to format and print various data.
#include <stdio.h>
 
char buffer[200];
int x, j = 0;
double f;
char *str = "w3resource";
char ch;
 
int main(void)
{
   ch = 'P';
   x = 7;
   f = 12.4567;
 
   /* Format and print various data */
   j = sprintf(buffer, "%s\n", str);
   j += sprintf(buffer+j, "%c\n", ch);
   j += sprintf(buffer+j, "%d\n", x);
   j += sprintf(buffer+j, "%f\n", f);
   printf("%s", buffer);
}
Output:
w3resource P 7 12.456700
C Programming Code Editor:
Previous C Programming:  C fprintf() 
  Next C Programming: C vfprintf()
