Back to C Programming
2026-07-147 min read

String Formats (C Programming)

Learn String Formats (C Programming) step by step with clear examples and exercises.

Why This Matters

In this comprehensive lesson on String Formats in C Programming, we delve into the intricacies of formatted string output using the printf function. Mastering these concepts is essential for tackling real-world coding challenges and interviews, as well as for debugging complex string manipulation issues that may arise during development.

Why This Matters

The importance of understanding string formats in C programming can be summarized as follows:

  1. Interviews: Many programming interviews involve questions related to string formatting and manipulation, making it crucial to have a deep understanding of this topic.
  2. Real-world coding: In any software development project, you'll encounter situations where you need to format and display strings in various ways.
  3. Debugging: String format errors can be challenging to diagnose, but mastering string formats will help you quickly identify and fix common issues that arise during development.
  4. Code readability and maintainability: Using proper string formatting techniques makes your code more readable and easier for others (and future you) to understand and maintain.

Prerequisites

To fully grasp the concepts covered in this lesson, you should already have a good understanding of:

  1. Basic C syntax, including variables, operators, control structures, and pointers.
  2. The printf function and its basic usage for outputting text.
  3. Data types and their representation in C programming.
  4. Arrays and strings in C programming.

Core Concept

In C programming, the printf function is used to display formatted strings on the console. It accepts a format string followed by arguments that correspond to placeholders in the format string. The format string can contain various format specifiers, which indicate how subsequent arguments should be formatted and displayed.

Format Specifiers

Format specifiers are placeholders within the format string that indicate how subsequent arguments should be formatted and displayed. They consist of a percent sign (%) followed by a character representing the desired data type. Some common format specifiers include:

  • %d: decimal integer
  • %i: decimal integer (equivalent to %d)
  • %o: octal integer
  • %u: unsigned integer
  • %x: hexadecimal integer (lowercase)
  • %X: hexadecimal integer (uppercase)
  • %f: floating-point number
  • %e: scientific notation for floating-point numbers
  • %g: selects between %f and %e, depending on the value's magnitude
  • %c: individual character
  • %s: string (array of characters terminated by a null character)

Examples

Let's consider an example to illustrate the usage of format specifiers with the printf function:

#include <stdio.h>

int main() {
int num = 42;
float pi = 3.14159;
char str[10] = "Hello";

printf("The number is %d\n", num);
printf("Pi is approximately %.6f\n", pi);
printf("The string is %s\n", str);

return 0;
}

In this example, we have defined three variables: an integer num, a floating-point number pi, and a character array str. We then use the printf function to display each variable using its corresponding format specifier. In addition, we've used the %.6f format specifier for pi to display six decimal places for improved accuracy.

Precision and Width

Format specifiers can also include precision and width modifiers to control the formatting of the output. These modifiers are optional and can be added after the format specifier, enclosed within parentheses (()).

  • Precision: Controls the number of digits displayed for floating-point numbers or the maximum number of characters displayed for strings. For example, %f with precision n will display n decimal places, while %s with precision n will truncate the string after n characters.
  • Width: Controls the minimum number of characters to be displayed for integers or the field width for strings. For example, %d with width n will display the integer as a string of at least n characters, padding with spaces if necessary.

Examples with Precision and Width

#include <stdio.h>

int main() {
int num = 123456;
float price = 987.654321;
char name[20] = "John Doe";

printf("Name: %-20s\n", name); // left-justified string with a minimum width of 20 characters
printf("Phone Number: (###) ###-####\n");
printf("Price: $%.2f\n", price); // floating-point number with two decimal places
printf("ID Number: %06d\n", num); // integer with zero-padding to a width of 6 digits

return 0;
}

In this example, we've used various format specifiers and modifiers to display our variables in different formats. For instance, we've formatted the name using left-justification (%-20s) and the ID number using zero-padding (%06d).

Worked Example

Now that you understand the basics of string formats in C programming, let's dive into a more complex example:

#include <stdio.h>

int main() {
int number = 123456789;
float price = 987.654321;
char name[20] = "John Doe";
double salary = 123456.789;

printf("Name: %-20s\n", name);
printf("Phone Number: (###) ###-####\n");
printf("Price: $%.2f\n", price);
printf("ID Number: %06d\n", number);
printf("Salary: $%.2f\n", salary);

return 0;
}

In this example, we've used various format specifiers and modifiers to display our variables in different formats. For instance, we've formatted the name using left-justification (%-20s) and the ID number using zero-padding (%06d). Additionally, we've included a new variable salary, which is displayed using the $%.2f format specifier to improve readability.

Common Mistakes

  1. Forgotten semicolon: Always remember to end statements with a semicolon (;).
  2. Incorrect format specifier: Make sure you use the correct format specifier for your data type. For example, using %d for a floating-point number will result in unexpected output.
  3. Mismatched arguments: Ensure that the order of arguments matches the order of format specifiers in the printf function call.
  4. Uninitialized variables: Always initialize your variables before using them to avoid undefined behavior.
  5. Buffer overflow: Be careful when handling character arrays to avoid buffer overflows, which can lead to security vulnerabilities and unexpected behavior.
  6. Incorrect precision or width: Using incorrect precision or width modifiers can result in truncated output or misaligned formatting.
  7. Missing null character: When working with strings, ensure that the string is terminated by a null character (\0) to indicate its end.

Common Mistakes - Examples

  1. Incorrect format specifier:
int num = 42;
printf("The number is %f\n", num); // incorrect format specifier for an integer
  1. Mismatched arguments:
int num = 42;
float pi = 3.14159;
printf("The number is %.2f, the pi is %d\n", pi, num); // mismatch between format specifiers and arguments
  1. Incorrect precision or width:
int num = 123456789;
printf("ID Number: %03d\n", num); // incorrect width modifier for the ID number

Practice Questions

  1. Write a program that takes in a student's name, age, and GPA, then displays their information using the printf function with appropriate format specifiers.
  2. Write a program that converts temperatures between Celsius and Fahrenheit using the printf function to display the results.
  3. Write a program that takes in an array of integers and calculates the sum, average, and maximum value using the printf function to display the results.
  4. Write a program that validates a phone number input by the user, ensuring it is in the format (###) ###-####. If the phone number is not valid, the program should prompt the user to re-enter the number.
  5. Write a program that reads a string from the user and capitalizes the first letter of each word in the string.

FAQ

  1. Why do I need to use format specifiers with printf?
  • Format specifiers allow you to control how your data is displayed, making it easier to create readable output.
  1. What happens if I use an incorrect format specifier for a particular data type?
  • Using an incorrect format specifier can result in unexpected output or even program crashes. Make sure you use the correct format specifier for your data type.
  1. How do I handle strings with printf?
  • To handle strings with printf, use the format specifier %s. This will display any character array as a string.
  1. What is the purpose of the zero-padding format specifier (e.g., %06d)?
  • The zero-padding format specifier (%06d) ensures that the output is padded with zeros to reach the specified width. In this example, the integer will be displayed as a 6-digit number, with leading zeros added if necessary.
  1. What does the precision modifier do in format specifiers?
  • The precision modifier controls the number of digits displayed for floating-point numbers or the maximum number of characters displayed for strings. For example, %f with precision n will display n decimal places, while %s with precision n will truncate the string after n characters.
  1. What does the width modifier do in format specifiers?
  • The width modifier controls the minimum number of characters to be displayed for integers or the field width for strings. For example, %d with width n will display the integer as a string of at least n characters, padding with spaces if necessary.