C strcpy Function

The strcpy() function copies a string from source to destination, including the null terminator \0. It is defined in the <string.h> header.


Basic Syntax

#include <string.h>
char *strcpy(char *destination, const char *source);
ParameterDescription
destinationPointer to destination array (must be large enough)
sourcePointer to source string to copy
Return valuePointer to destination (useful for chaining)

Example 1: Basic String Copy

#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello World";
char destination[20];  // Must be large enough
strcpy(destination, source);
printf("Source: %s\n", source);
printf("Destination: %s\n", destination);
return 0;
}

Output:

Source: Hello World
Destination: Hello World

Example 2: Copying Partial Strings

#include <stdio.h>
#include <string.h>
int main() {
char text[] = "Programming in C";
char buffer[30];
// Copy entire string
strcpy(buffer, text);
printf("Full copy: %s\n", buffer);
// Copy from specific position using pointer arithmetic
strcpy(buffer, text + 4);  // Starts at position 4 ( 'r' )
printf("From index 4: %s\n", buffer);
// buffer now contains "ramming in C"
return 0;
}

Output:

Full copy: Programming in C
From index 4: ramming in C

Example 3: Chaining strcpy Calls

#include <stdio.h>
#include <string.h>
int main() {
char first[20];
char second[20];
char third[20];
// strcpy returns destination, allowing chaining
strcpy(third, strcpy(second, strcpy(first, "Chain")));
printf("First: %s\n", first);
printf("Second: %s\n", second);
printf("Third: %s\n", third);
return 0;
}

Output:

First: Chain
Second: Chain
Third: Chain

Example 4: Copying Between Arrays

#include <stdio.h>
#include <string.h>
int main() {
char name1[] = "Alice Johnson";
char name2[50];
char name3[50];
// Copy to another array
strcpy(name2, name1);
// Copy to itself is undefined behavior (don't do it)
// strcpy(name1, name1);  // ❌ BAD - Overlapping memory
// Modify original
strcpy(name1, "Bob Smith");
printf("Original: %s\n", name1);
printf("Copied (before): %s\n", name2);
// Copy again
strcpy(name3, name2);
printf("Second copy: %s\n", name3);
return 0;
}

Output:

Original: Bob Smith
Copied (before): Alice Johnson
Second copy: Alice Johnson

Example 5: Building Strings with strcpy and strcat

#include <stdio.h>
#include <string.h>
int main() {
char greeting[100];
char name[] = "John";
char exclamation[] = "!";
// Build: "Hello " + "John" + "!"
strcpy(greeting, "Hello ");
strcat(greeting, name);
strcat(greeting, exclamation);
printf("%s\n", greeting);
// Alternative using chaining
char message[100];
strcpy(strcpy(message, "Welcome, "), "Alice");
printf("%s\n", message);
return 0;
}

Output:

Hello John!
Welcome, Alice

Example 6: Copying String Literals

#include <stdio.h>
#include <string.h>
int main() {
char buffer[100];
// Copy string literal directly
strcpy(buffer, "Direct string literal");
printf("%s\n", buffer);
// Copy from const char* pointer
const char *msg = "Pointer to string";
strcpy(buffer, msg);
printf("%s\n", buffer);
// Copy multiple times (overwrites previous)
strcpy(buffer, "New content");
strcpy(buffer, "Overwritten again");
printf("%s\n", buffer);
return 0;
}

Output:

Direct string literal
Pointer to string
Overwritten again

The Danger: Buffer Overflow

#include <stdio.h>
#include <string.h>
int main() {
char small[5];  // Only 5 bytes capacity
// ❌ DANGEROUS - Source is larger than destination
// This will overflow and cause undefined behavior
char large[] = "This is too long";
// strcpy(small, large);  // CRASH or memory corruption!
// ✅ SAFE - Use strncpy or ensure size
char safe[50];
strcpy(safe, large);  // Safe because safe[] is large enough
printf("%s\n", safe);
return 0;
}

strcpy vs strncpy (Safe Alternative)

#include <stdio.h>
#include <string.h>
int main() {
char dest[10];
char src[] = "This is a very long string";
// strcpy - UNSAFE (will overflow)
// strcpy(dest, src);  // ❌ DON'T DO THIS
// strncpy - SAFER (copies max n characters)
strncpy(dest, src, sizeof(dest) - 1);  // Copy 9 chars
dest[sizeof(dest) - 1] = '\0';  // Manually add null terminator
printf("Copied: %s\n", dest);
// Note: strncpy doesn't add null terminator if src >= n
char dest2[5] = "XXXX";
strncpy(dest2, "Hi", 3);
printf("strncpy result: %s\n", dest2);  // "Hi" + null
return 0;
}

Output:

Copied: This is a
strncpy result: Hi

Comparison Table

FunctionCopies Null Terminator?Bounds Checked?Use Case
strcpy(dest, src)YesNoWhen dest size is guaranteed
strncpy(dest, src, n)Only if src shorter than nYesLimited copy (may need manual null)
strcpy_s(dest, size, src) (C11)YesYesSafe version (optional in C11)

Common Mistakes

// ❌ WRONG - Destination too small
char dest[5];
char src[] = "Hello World";
strcpy(dest, src);  // Overflow!
// ✅ CORRECT - Ensure destination is large enough
char dest[50];
strcpy(dest, src);
// ❌ WRONG - Uninitialized destination
char *dest;  // Points to random memory
strcpy(dest, "text");  // CRASH
// ✅ CORRECT - Use array or malloc
char dest[20];
char *ptr = malloc(20);
strcpy(ptr, "text");
// ❌ WRONG - Overlapping memory
char str[20] = "Hello";
strcpy(str + 1, str);  // Undefined behavior
// ✅ CORRECT - Use memmove for overlapping
memmove(str + 1, str, 6);  // Safe overlapping copy

Practical Example: String Array Copy

#include <stdio.h>
#include <string.h>
int main() {
char original[5][20] = {
"Apple",
"Banana",
"Cherry",
"Date",
"Elderberry"
};
char copy[5][20];
// Copy entire array of strings
for(int i = 0; i < 5; i++) {
strcpy(copy[i], original[i]);
}
// Modify original
strcpy(original[0], "Apricot");
strcpy(original[1], "Blueberry");
printf("Original:\n");
for(int i = 0; i < 5; i++) {
printf("  %s\n", original[i]);
}
printf("\nCopy (unchanged):\n");
for(int i = 0; i < 5; i++) {
printf("  %s\n", copy[i]);
}
return 0;
}

Output:

Original:
Apricot
Blueberry
Cherry
Date
Elderberry
Copy (unchanged):
Apple
Banana
Cherry
Date
Elderberry

Return Value Usage

#include <stdio.h>
#include <string.h>
int main() {
char buffer[100];
int length;
// strcpy returns pointer to destination
char *result = strcpy(buffer, "Hello");
// Check if success (always returns dest unless error)
if(result == buffer) {
printf("Copy successful\n");
}
// Can use return value in expressions
length = strlen(strcpy(buffer, "New string"));
printf("Length of '%s' is %d\n", buffer, length);
return 0;
}

Output:

Copy successful
Length of 'New string' is 10

Quick Summary

OperationCodeNotes
Basic copystrcpy(dest, src)dest must be large enough
Safe copystrncpy(dest, src, size-1); dest[size-1]=0Always null terminate
Copy literalstrcpy(dest, "text")Works directly
Chain copiesstrcpy(dest2, strcpy(dest1, src))Returns destination
Copy pointer contentstrcpy(dest, ptr)ptr must point to valid string

Best Practice Rules

  1. Always ensure destination is large enough for source + null terminator
  2. Use strncpy() for safety when size isn't guaranteed
  3. Manually add null terminator after strncpy() if needed
  4. Never use strcpy() with user input without validation
  5. Never copy between overlapping strings (use memmove())
  6. C11's strcpy_s() is safe but not universally available

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