What is String Output?
String output in C refers to displaying or printing string data to the console (standard output) using various functions. The most common functions are printf(), puts(), and fputs().
Main String Output Functions
| Function | Header | Adds Newline? | Formatting? | Use Case |
|---|---|---|---|---|
printf() | <stdio.h> | No | Yes | Formatted output |
puts() | <stdio.h> | Yes | No | Simple string output |
fputs() | <stdio.h> | No | No | File/stream output |
putchar() | <stdio.h> | No | No | Single character |
1. printf() - Formatted String Output
The most versatile output function for strings.
Basic Usage
#include <stdio.h>
int main() {
// Simple string output
printf("Hello World");
// With newline
printf("Hello World\n");
// Multiple strings
printf("Hello " "World\n");
// String variable
char name[] = "Alice";
printf("Name: %s\n", name);
return 0;
}
Format Specifiers with Strings
#include <stdio.h>
int main() {
char name[] = "Bob";
char city[] = "New York";
int age = 25;
// Basic string formatting
printf("Name: %s\n", name);
// Multiple strings
printf("%s lives in %s\n", name, city);
// Mixing with other types
printf("%s is %d years old\n", name, age);
// Field width (minimum characters)
printf("|%10s|\n", name); // Right aligned, width 10
printf("|%-10s|\n", name); // Left aligned, width 10
// Precision (maximum characters to print)
printf("%.3s\n", "Hello"); // Prints "Hel"
printf("%.5s\n", "Hello"); // Prints "Hello"
// Combining width and precision
printf("|%10.3s|\n", "Hello"); // Right aligned, width 10, max 3 chars
return 0;
}
Output:
| Bob| |Bob | Hel Hello | Hel|
Escape Sequences in printf()
#include <stdio.h>
int main() {
// Newline
printf("Line 1\nLine 2\n");
// Tab
printf("Column1\tColumn2\tColumn3\n");
// Double quote
printf("She said, \"Hello!\"\n");
// Backslash
printf("C:\\Program Files\\MyApp\n");
// Carriage return (overwrites beginning)
printf("Hello\rWorld\n"); // Prints "World" (overwrites Hello)
// Backspace
printf("Hello\b\b\b \n"); // Removes "llo"
return 0;
}
Output:
Line 1 Line 2 Column1 Column2 Column3 She said, "Hello!" C:\Program Files\MyApp World Hel
2. puts() - Simple String Output
puts() automatically adds a newline at the end.
#include <stdio.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
// Automatically adds newline
puts("Hello World");
puts(str1);
puts(str2);
// Cannot use formatting
// puts("Value: %d", 10); // WRONG! puts doesn't format
// Multiple puts calls
puts("First line");
puts("Second line");
return 0;
}
Output:
Hello World Hello World First line Second line
puts() vs printf()
#include <stdio.h>
int main() {
char name[] = "Charlie";
int age = 30;
// puts is simpler for plain strings
puts("Simple message");
// printf needed for formatting
printf("Name: %s, Age: %d\n", name, age);
// puts adds newline automatically
printf("No newline");
puts("Has newline");
// Manual newline with printf
printf("Has newline\n");
return 0;
}
3. fputs() - File String Output (Also Console)
fputs() is like puts() but without automatic newline and can output to any stream.
#include <stdio.h>
int main() {
char str[] = "Hello World";
// Output to stdout (console) - no automatic newline
fputs("No newline here", stdout);
fputs("Continues on same line", stdout);
fputs("\nAdd newline manually", stdout);
printf("\n");
// Output string variable
fputs(str, stdout);
fputs("\n", stdout);
return 0;
}
Output:
No newline hereContinues on same line Add newline manually Hello World
4. putchar() - Single Character Output
For outputting characters one at a time.
#include <stdio.h>
int main() {
char str[] = "Hello";
// Output single character
putchar('A');
putchar('\n');
// Output string character by character
for(int i = 0; str[i] != '\0'; i++) {
putchar(str[i]);
}
putchar('\n');
// Using with escape sequences
putchar('H');
putchar('i');
putchar('!');
putchar('\n');
return 0;
}
Output:
A Hello Hi!
5. Advanced printf() String Formatting
Width and Precision Control
#include <stdio.h>
int main() {
char str[] = "Programming";
// Minimum width (right-aligned)
printf("|%15s|\n", str);
printf("|%20s|\n", str);
// Minimum width (left-aligned)
printf("|%-15s|\n", str);
printf("|%-20s|\n", str);
// Maximum characters to print
printf("|%.5s|\n", str); // First 5 chars
printf("|%.10s|\n", str); // First 10 chars
// Combination
printf("|%15.5s|\n", str); // Width 15, max 5 chars (right)
printf("|%-15.5s|\n", str); // Width 15, max 5 chars (left)
// Dynamic width and precision
int width = 10;
int precision = 4;
printf("|%*.*s|\n", width, precision, str);
return 0;
}
Output:
| Programming| | Programming| |Programming | |Programming | |Progr| |Programming| | Progr| |Progr | | Prog|
Printing Strings from Arrays of Strings
#include <stdio.h>
int main() {
// Array of strings
char fruits[3][20] = {
"Apple",
"Banana",
"Cherry"
};
// Print all fruits
for(int i = 0; i < 3; i++) {
printf("Fruit %d: %s\n", i+1, fruits[i]);
}
// Formatted table
printf("\n%-10s %-10s\n", "Index", "Fruit");
printf("%-10s %-10s\n", "-----", "-----");
for(int i = 0; i < 3; i++) {
printf("%-10d %-10s\n", i, fruits[i]);
}
return 0;
}
Output:
Fruit 1: Apple Fruit 2: Banana Fruit 3: Cherry Index Fruit ----- ----- 0 Apple 1 Banana 2 Cherry
6. Practical Examples
Example 1: Formatted Report
#include <stdio.h>
#include <string.h>
int main() {
char names[5][20] = {"Alice", "Bob", "Charlie", "Diana", "Eve"};
int scores[5] = {95, 87, 92, 88, 96};
// Print header
printf("\n========== GRADE REPORT ==========\n");
printf("%-10s %-10s %s\n", "Name", "Score", "Grade");
printf("%-10s %-10s %s\n", "----", "-----", "-----");
// Print each student
for(int i = 0; i < 5; i++) {
char grade;
if(scores[i] >= 90) grade = 'A';
else if(scores[i] >= 80) grade = 'B';
else grade = 'C';
printf("%-10s %-10d %c\n", names[i], scores[i], grade);
}
printf("==================================\n");
return 0;
}
Output:
========== GRADE REPORT ========== Name Score Grade ---- ----- ----- Alice 95 A Bob 87 B Charlie 92 A Diana 88 B Eve 96 A ==================================
Example 2: Progress Bar
#include <stdio.h>
#include <string.h>
void printProgressBar(int percentage) {
printf("[");
int bars = percentage / 2; // 50 bars max
for(int i = 0; i < 50; i++) {
if(i < bars) {
printf("=");
} else if(i == bars && percentage < 100) {
printf(">");
} else {
printf(" ");
}
}
printf("] %3d%%\r", percentage);
fflush(stdout); // Force immediate output
}
int main() {
for(int i = 0; i <= 100; i += 10) {
printProgressBar(i);
// Simulate work
for(int j = 0; j < 100000000; j++);
}
printf("\nComplete!\n");
return 0;
}
Example 3: Text Centering
#include <stdio.h>
#include <string.h>
void printCentered(const char *str, int width) {
int len = strlen(str);
int padding = (width - len) / 2;
printf("%*s%s%*s\n", padding, "", str, width - len - padding, "");
}
int main() {
int screenWidth = 40;
printCentered("WELCOME", screenWidth);
printCentered("to", screenWidth);
printCentered("C Programming", screenWidth);
printCentered("---", screenWidth);
printCentered("Learn by Doing", screenWidth);
return 0;
}
Output:
WELCOME to C Programming --- Learn by Doing
7. String Output to Different Destinations
Output to stderr (Error Stream)
#include <stdio.h>
int main() {
// Normal output to stdout
printf("This is normal output\n");
// Error output to stderr
fprintf(stderr, "This is an error message\n");
// Using fputs with stderr
fputs("Critical error occurred!\n", stderr);
return 0;
}
Output to File (Brief Example)
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "w");
if(file != NULL) {
fprintf(file, "Writing string to file\n");
fputs("Another line in file\n", file);
fclose(file);
printf("Data written to output.txt\n");
}
return 0;
}
8. Common Mistakes and Best Practices
#include <stdio.h>
#include <string.h>
int main() {
// MISTAKE 1: Forgetting null terminator
char str1[5] = "Hello"; // No space for \0
// printf("%s", str1); // May print extra garbage
char str2[6] = "Hello"; // Correct (5 chars + \0)
printf("Correct: %s\n", str2);
// MISTAKE 2: Using puts with uninitialized string
char str3[10]; // Contains garbage
// puts(str3); // Prints garbage until \0 found
// Always initialize
char str4[10] = ""; // First char is \0
puts("Empty string is safe");
// MISTAKE 3: Missing newline confusion
printf("First line");
printf("Second line"); // Prints "First lineSecond line"
puts(""); // Add newline
printf("Better with newline\n");
// BEST PRACTICE: Flush output when needed
printf("Processing...");
fflush(stdout); // Force immediate display
return 0;
}
Quick Reference: String Output Functions
| Function | Syntax | Newline | Formats | Use Case |
|---|---|---|---|---|
| printf | printf("text %s", str); | No | Yes | Most common, formatted |
| puts | puts("text"); | Yes | No | Simple strings |
| fputs | fputs("text", stdout); | No | No | Stream output |
| putchar | putchar('A'); | No | No | Single character |
| fprintf | fprintf(stderr, "%s", str); | No | Yes | File/error output |
Summary
- printf() is the most versatile - use for formatted output
- puts() is simplest for plain strings with automatic newline
- fputs() gives control over newline and output destination
- Use escape sequences for special characters (\n, \t, \")
- Field width and precision control formatting with printf
- Always ensure strings are null-terminated before printing
- fflush(stdout) forces immediate output when needed
Complete Guide to Core & Advanced C Programming Concepts (Functions, Strings, Arrays, Loops, I/O, Control Flow)
https://macronepal.com/bash/building-blocks-of-c-a-complete-guide-to-functions/
Explains how functions in C work as reusable blocks of code, including declaration, definition, parameters, return values, and modular programming structure.
https://macronepal.com/bash/the-heart-of-text-processing-a-complete-guide-to-strings-in-c-2/
Explains how strings are handled in C using character arrays, string manipulation techniques, and common library functions for text processing.
https://macronepal.com/bash/the-cornerstone-of-data-organization-a-complete-guide-to-arrays-in-c/
Explains arrays in C as structured memory storage for multiple values, including indexing, initialization, and efficient data organization.
https://macronepal.com/bash/guaranteed-execution-a-complete-guide-to-the-do-while-loop-in-c/
Explains the do-while loop in C, where the loop body executes at least once before checking the condition.
https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-the-for-loop-in-c/
Explains the for loop in C, including initialization, condition checking, and increment/decrement for controlled iteration.
https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-while-loops-in-c/
Explains the while loop in C, focusing on condition-based repetition and proper loop control mechanisms.
https://macronepal.com/bash/beyond-if-else-a-complete-guide-to-switch-case-in-c/
Explains switch-case statements in C, enabling multi-branch decision-making based on variable values.
https://macronepal.com/bash/mastering-conditional-logic-a-complete-guide-to-if-else-statements-in-c/
Explains if-else statements in C for decision-making and controlling program flow based on conditions.
https://macronepal.com/bash/mastering-the-fundamentals-a-complete-guide-to-arithmetic-operations-in-c/
Explains arithmetic operations in C such as addition, subtraction, multiplication, division, and operator precedence.
https://macronepal.com/bash/foundation-of-c-programming-a-complete-guide-to-basic-input-output/
Explains basic input and output in C using scanf and printf for interacting with users and displaying results.
Online C Code Compiler
https://macronepal.com/free-online-c-code-compiler-2/