C String Output

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

FunctionHeaderAdds Newline?Formatting?Use Case
printf()<stdio.h>NoYesFormatted output
puts()<stdio.h>YesNoSimple string output
fputs()<stdio.h>NoNoFile/stream output
putchar()<stdio.h>NoNoSingle 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

FunctionSyntaxNewlineFormatsUse Case
printfprintf("text %s", str);NoYesMost common, formatted
putsputs("text");YesNoSimple strings
fputsfputs("text", stdout);NoNoStream output
putcharputchar('A');NoNoSingle character
fprintffprintf(stderr, "%s", str);NoYesFile/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/

Leave a Reply

Your email address will not be published. Required fields are marked *


Macro Nepal Helper