C Array of Strings

An array of strings is a two-dimensional array of characters where each row stores one string. Alternatively, it can be an array of pointers to strings.


Two Ways to Create Array of Strings

MethodSyntaxMemory LocationCan Modify?
2D char arraychar names[3][20]Stack/Data segmentYes
Array of pointerschar *names[3]Pointers on stack, strings in read-only memoryDepends

Method 1: 2D Character Array (Fixed Size)

#include <stdio.h>
int main() {
// 3 strings, each max 20 characters (including null terminator)
char fruits[3][20] = {
"Apple",
"Banana",
"Cherry"
};
// Accessing and printing
printf("First fruit: %s\n", fruits[0]);
printf("Second fruit: %s\n", fruits[1]);
printf("Third fruit: %s\n", fruits[2]);
return 0;
}

Output:

First fruit: Apple
Second fruit: Banana
Third fruit: Cherry

Method 2: Array of Pointers (Flexible)

#include <stdio.h>
int main() {
// Array of pointers to string literals
char *colors[] = {
"Red",
"Green",
"Blue",
"Yellow"
};
int size = sizeof(colors) / sizeof(colors[0]);
for(int i = 0; i < size; i++) {
printf("%s\n", colors[i]);
}
return 0;
}

Output:

Red
Green
Blue
Yellow

Example 1: Loop Through All Strings

#include <stdio.h>
int main() {
char cities[4][15] = {
"New York",
"London",
"Tokyo",
"Paris"
};
int rows = 4;
for(int i = 0; i < rows; i++) {
printf("City %d: %s\n", i + 1, cities[i]);
}
return 0;
}

Output:

City 1: New York
City 2: London
City 3: Tokyo
City 4: Paris

Example 2: User Input into String Array

#include <stdio.h>
int main() {
char names[5][50];
printf("Enter 5 names:\n");
for(int i = 0; i < 5; i++) {
printf("Name %d: ", i + 1);
fgets(names[i], 50, stdin);  // Read with spaces
// Remove newline character if present
size_t len = strlen(names[i]);
if(len > 0 && names[i][len-1] == '\n') {
names[i][len-1] = '\0';
}
}
printf("\nYou entered:\n");
for(int i = 0; i < 5; i++) {
printf("Name %d: %s\n", i + 1, names[i]);
}
return 0;
}

Example 3: Modify Strings in Array

#include <stdio.h>
#include <string.h>
int main() {
char words[3][20] = {
"Hello",
"World",
"Coding"
};
printf("Before modification:\n");
for(int i = 0; i < 3; i++) {
printf("%s\n", words[i]);
}
// Modify strings
strcpy(words[0], "Hi");
strcpy(words[1], "Universe");
strcat(words[2], " is fun");
printf("\nAfter modification:\n");
for(int i = 0; i < 3; i++) {
printf("%s\n", words[i]);
}
return 0;
}

Output:

Before modification:
Hello
World
Coding
After modification:
Hi
Universe
Coding is fun

Example 4: Passing Array of Strings to Function

#include <stdio.h>
#include <string.h>
void printStrings(char arr[][20], int rows) {
for(int i = 0; i < rows; i++) {
printf("%s\n", arr[i]);
}
}
void convertToUpper(char arr[][20], int rows) {
for(int i = 0; i < rows; i++) {
for(int j = 0; arr[i][j]; j++) {
if(arr[i][j] >= 'a' && arr[i][j] <= 'z') {
arr[i][j] = arr[i][j] - 32;
}
}
}
}
int main() {
char words[3][20] = {
"apple",
"banana",
"cherry"
};
printf("Original:\n");
printStrings(words, 3);
convertToUpper(words, 3);
printf("\nUppercase:\n");
printStrings(words, 3);
return 0;
}

Output:

Original:
apple
banana
cherry
Uppercase:
APPLE
BANANA
CHERRY

Example 5: Sorting Array of Strings

#include <stdio.h>
#include <string.h>
void sortStrings(char arr[][50], int count) {
char temp[50];
for(int i = 0; i < count - 1; i++) {
for(int j = i + 1; j < count; j++) {
if(strcmp(arr[i], arr[j]) > 0) {
// Swap strings
strcpy(temp, arr[i]);
strcpy(arr[i], arr[j]);
strcpy(arr[j], temp);
}
}
}
}
int main() {
char fruits[5][50] = {
"Mango",
"Apple",
"Grape",
"Banana",
"Cherry"
};
printf("Before sorting:\n");
for(int i = 0; i < 5; i++) {
printf("%s\n", fruits[i]);
}
sortStrings(fruits, 5);
printf("\nAfter sorting:\n");
for(int i = 0; i < 5; i++) {
printf("%s\n", fruits[i]);
}
return 0;
}

Output:

Before sorting:
Mango
Apple
Grape
Banana
Cherry
After sorting:
Apple
Banana
Cherry
Grape
Mango

Example 6: Array of Pointers (String Literals)

#include <stdio.h>
int main() {
// String literals - stored in read-only memory
char *months[] = {
"January",
"February",
"March",
"April",
"May",
"June"
};
int size = 6;
printf("Months of the year:\n");
for(int i = 0; i < size; i++) {
printf("%d. %s\n", i + 1, months[i]);
}
// months[0][0] = 'J';  // ❌ WRONG - Cannot modify string literal
return 0;
}

Output:

Months of the year:
1. January
2. February
3. March
4. April
5. May
6. June

Memory Comparison

// Method 1: 2D Array - Memory allocated contiguously
char arr1[3][10] = {"One", "Two", "Three"};
// Memory layout:
// [O][n][e][\0][ ][ ][ ][ ][ ][ ]
// [T][w][o][\0][ ][ ][ ][ ][ ][ ]
// [T][h][r][e][e][\0][ ][ ][ ][ ]
// Method 2: Array of Pointers
char *arr2[3] = {"One", "Two", "Three"};
// Memory layout:
// arr2[0] → "One" (somewhere in read-only memory)
// arr2[1] → "Two"
// arr2[2] → "Three"

String Array Operations Table

OperationCodeNotes
Declare 2D arraychar arr[10][50]10 strings, max 49 chars each
Declare pointer arraychar *arr[10]10 pointers to strings
Access stringarr[i]Returns entire string
Access characterarr[i][j]Returns single character
Copy stringstrcpy(arr[i], "text")Use for 2D arrays
Compare stringsstrcmp(arr[i], arr[j])Returns 0 if equal
Get string lengthstrlen(arr[i])Length without null terminator
Input with spacesfgets(arr[i], size, stdin)Safer than scanf

Common Mistakes

// ❌ WRONG - No space for null terminator
char arr[3][5] = {"Hello", "World"};  // "Hello" needs 6 bytes (5+1)
// ✅ CORRECT - Always allocate extra space
char arr[3][10] = {"Hello", "World"};
// ❌ WRONG - Trying to modify string literal
char *ptr[] = {"Apple", "Banana"};
ptr[0][0] = 'a';  // CRASH - String literal is read-only
// ✅ CORRECT - Use 2D array for modifiable strings
char arr[2][10] = {"Apple", "Banana"};
arr[0][0] = 'a';  // Works fine
// ❌ WRONG - Forgetting & in scanf
char names[5][20];
scanf("%s", names[0]);   // ✅ Correct (array name is address)
scanf("%s", &names[0]);  // Also works but & is optional
// ✅ CORRECT - fgets is safer
fgets(names[0], 20, stdin);

When to Use Each Method

Use CaseRecommended MethodReason
Need to modify strings2D char array char arr[10][50]Strings are modifiable
Fixed list of constantsArray of pointers char *arr[]Saves memory
Unknown string lengthsArray of pointers + dynamic allocationMore flexible
Pass to functionsEither worksDepends on needs
Small embedded systems2D char arrayFixed, predictable memory

Quick Summary

ConceptSyntaxExample
Declare 2D arraychar arr[rows][cols]char names[5][50]
Declare pointer arraychar *arr[size]char *colors[10]
Access stringarr[i]printf("%s", names[2])
Access characterarr[i][j]char ch = names[0][1]
Loop throughfor(i=0; i<rows; i++)Iterate all strings
String inputfgets(arr[i], size, stdin)Safe input
String copystrcpy(arr[i], source)Use for 2D arrays

Complete C Programming Guide + Compilers Collection


1. C srand() Function – Understanding Seed Initialization

https://macronepal.com/understanding-the-c-srand-function
Explains how srand() initializes the pseudo-random number generator in C by setting a seed value. Using the same seed produces the same sequence, while time(NULL) gives different results each run.


2. C rand() Function Mechanics and Limitations

https://macronepal.com/c-rand-function-mechanics-and-limitations
Explains how rand() generates pseudo-random numbers between 0 and RAND_MAX, its deterministic nature, and limitations for security use cases.


3. C log() Function

https://macronepal.com/c-log-function-2
Covers natural logarithm calculation using <math.h> and its applications.


4. Mastering Date and Time in C

https://macronepal.com/mastering-date-and-time-in-c
Explains <time.h> functions like time(), clock(), difftime(), and struct tm.


5. Mastering time_t Type in C

https://macronepal.com/mastering-the-c-time_t-type-for-time-management
Explains time representation as seconds since Unix epoch and conversion functions.


6. C exp() Function

https://macronepal.com/c-exp-function-mechanics-and-implementation
Explains exponential function exp(x) and its scientific applications.


7. C log() Function (Alternate Guide)

https://macronepal.com/c-log-function
Comparison of log() and log10() with usage examples.


8. C log10() Function

https://macronepal.com/mastering-the-log10-function-in-c
Explains base-10 logarithm for engineering and scientific applications.


9. C tan() Function

https://macronepal.com/understanding-the-c-tan-function
Explains tangent function and radian-based calculations.


10. Random Numbers in C (Secure vs Predictable)

https://macronepal.com/mastering-c-random-numbers-for-secure-and-predictable-applications
Explains difference between rand() and secure randomness methods.


11. Free Online C Compiler

https://macronepal.com/free-online-c-code-compiler-2
Browser-based compiler for testing C programs instantly.


C Functions, Arguments, Parameters & Flow

Mastering Functions in C – Complete Guide

https://macronepal.com/c/mastering-functions-in-c-a-complete-guide/
Covers function structure, modular programming, and real-world usage.


Function Arguments in C

https://macronepal.com/c-function-arguments/
Explains how arguments are passed and used in function calls.


Function Parameters in C

https://macronepal.com/c-function-parameters/
Explains defining inputs for functions and matching them with arguments.


Function Declarations in C

https://macronepal.com/c-function-declarations-syntax-rules-and-best-practices/
Covers prototypes, syntax rules, and best practices.


Function Calls in C

https://macronepal.com/understanding-function-calls-in-c-syntax-mechanics-and-best-practices/
Explains execution flow and parameter handling during function calls.


Void Functions in C

https://macronepal.com/understanding-void-functions-in-c-syntax-patterns-and-best-practices/
Explains functions that do not return values.


Return Values in C

https://macronepal.com/c-return-values-mechanics-types-and-best-practices/
Explains different return types and how functions return results.


Pass-by-Value in C

https://macronepal.com/aws/understanding-pass-by-value-in-c-mechanics-implications-and-best-practices/
Explains how copies of variables are passed into functions.


Pass-by-Reference in C

https://macronepal.com/c/understanding-pass-by-reference-in-c-pointers-semantics-and-safe-practices/
Explains using pointers to modify original variables.


C strstr() Function

https://macronepal.com/aws/c-strstr-function/
Explains substring search inside strings in C.


C Preprocessor & Macros

https://macronepal.com/mastering-c-variadic-macros-for-flexible-debugging/
https://macronepal.com/mastering-the-stdc-macro-in-c/
https://macronepal.com/c-time-macro-mechanics-and-usage/
https://macronepal.com/understanding-the-c-date-macro/
https://macronepal.com/c-file-type/
https://macronepal.com/mastering-c-line-macro-for-debugging-and-diagnostics/
https://macronepal.com/mastering-predefined-macros-in-c/
https://macronepal.com/c-error-directive-mechanics-and-usage/
https://macronepal.com/understanding-the-c-pragma-directive/
https://macronepal.com/c-include-directive/


C Structures, Memory, Scope & Linkage

https://macronepal.com/mastering-structures-in-c/
https://macronepal.com/c-structure-declaration-mechanics-and-usage/
https://macronepal.com/c-structure-initialization-mechanics-and-best-practices/
https://macronepal.com/mastering-c-structure-member-access-for-reliable-data-handling/
https://macronepal.com/c-nested-structures/
https://macronepal.com/mastering-arrays-of-structures-in-c/
https://macronepal.com/c-structure-pointers-mechanics-and-implementation/
https://macronepal.com/understanding-c-structure-parameter-passing-mechanics/
https://macronepal.com/mastering-c-returning-structures-for-efficient-data-flow/
https://macronepal.com/c-self-referential-structures/
https://macronepal.com/mastering-structure-alignment-in-c/
https://macronepal.com/c-structure-padding-mechanics-and-optimization/
https://macronepal.com/understanding-c-flexible-array-members-mechanics-and-usage/
https://macronepal.com/mastering-c-anonymous-structures-for-flattened-data-layouts/
https://macronepal.com/c-unions/
https://macronepal.com/mastering-c-name-mangling-and-symbol-decoration/
https://macronepal.com/c-no-linkage-mechanics-and-scope-isolation/
https://macronepal.com/understanding-c-internal-linkage-mechanics-and-architecture/


C Scope, Storage Classes & Typedef

https://macronepal.com/mastering-function-prototype-scope-in-c/
https://macronepal.com/c-function-scope-mechanics-and-visibility/
https://macronepal.com/understanding-c-file-scope-mechanics-and-architecture/
https://macronepal.com/mastering-c-scope-rules-for-predictable-name-resolution/
https://macronepal.com/c-scope-rules/
https://macronepal.com/mastering-c-register-storage-class-for-historical-context-and-modern-alternatives/
https://macronepal.com/mastering-_thread_local-in-c/
https://macronepal.com/c-extern-storage-class-mechanics-and-usage/
https://macronepal.com/understanding-the-c-static-storage-class-mechanics-and-usage/
https://macronepal.com/c-auto-storage-class/
https://macronepal.com/c-typedef-with-pointers/


Extra Articles

https://macronepal.com/13757-2/
https://macronepal.com/13748-2/
https://macronepal.com/13747-2/
https://macronepal.com/13746-2/
https://macronepal.com/13745-2/
https://macronepal.com/13708-2/
https://macronepal.com/13707-2/
https://macronepal.com/13702-2/


Online Compilers

https://macronepal.com/free-html-online-code-compiler/
https://macronepal.com/free-online-python-code-compiler/
https://macronepal.com/free-online-python2-code-compiler/
https://macronepal.com/free-online-java-code-compiler/
https://macronepal.com/free-online-javascript-code-compiler/
https://macronepal.com/free-online-node-js-code-compiler/
https://macronepal.com/free-online-c-code-compiler/
https://macronepal.com/free-online-c-code-compiler-2/
https://macronepal.com/free-online-c-code-compiler-3/
https://macronepal.com/free-online-php-code-compiler/
https://macronepal.com/free-online-ruby-code-compiler/
https://macronepal.com/free-online-perl-code-compiler/
https://macronepal.com/free-online-lua-code-compiler/
https://macronepal.com/free-online-tcl-code-compiler/
https://macronepal.com/free-online-groovy-code-compiler/
https://macronepal.com/free-online-j-shell-code-compiler/
https://macronepal.com/free-online-haskell-code-compiler/
https://macronepal.com/free-online-scala-code-compiler/
https://macronepal.com/free-online-common-lisp-code-compiler/
https://macronepal.com/free-online-d-code-compiler/
https://macronepal.com/free-online-ada-code-compiler/
https://macronepal.com/free-erlang-code-compiler/
https://macronepal.com/free-online-assembly-code-compiler/

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