In this blog post, you will learn about the C memcpy_s() function with the help of programming examples. I will also discuss some important points related to the memcpy_s in C.
Similar to the memcpy function, the memcpy_s function also copies n characters from the source object src to the destination object dest.
Now I belive you are thinking that if C already have memcpy which copies n characters from the source object to the destination object then what is requirement to introduced memcpy_s.
Your question is genuine. But don’t worry I will give answer of your question.
The memcpy_s is similar to the memcpy but it detect the errors at runtime. If there is a runtime-constraint violation, the memcpy_s function stores zeros in the first destmax characters of the object pointed to by dest if dest is not a null pointer and destmax is not greater than RSIZE_MAX.
Syntax memcpy_s in C:
The memcpy_s() declare in <string.h> header file. The following is the syntax of the memcpy_s function in C.
errno_t memcpy_s(void * restrict dest, rsize_t destmax, const void * restrict src,rsize_t n);//since C11
memcpy_s Parameters:
The memcpy_s() the function accepts the following parameters:
| dest | – | pointer to the destination object to copy to |
| desmax | – | max number of bytes to modify in the destination |
| src | – | pointer to the source object to copy from |
| n | – | number of bytes to copy |
memcpy_s return value:
The memcpy_s function returns zero if there was no runtime-constraint violation. Otherwise, a
nonzero value is returned.
Example program to describe how to use memcpy_s C:
The following program illustrates the working of the memcpy_s() function in the C language.
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>
int main()
{
char dest[50] = {0};
char src[100] = "Hi Aticleworld Readers, thanks for reading";
int i = 0;
const int n = 22;
errno_t err;
// Tell memcpy_s to copy 22 char
err = memcpy_s(dest, sizeof(dest), src, n);
if (err)
{
printf("Error executing memcpy_s.\n");
}
else
{
for (i = 0; i < n; i++)
{
printf("%c ", dest[i]);
}
}
printf("\n");
return 0;
}
Ouput:
Hi Aticleworld Readers
Note: The memcpy_s function is only guaranteed to available to use only if the implementation defines __STDC_LIB_EXT1__ and additionally the user code defines __STDC_WANT_LIB_EXT1__ before any inclusion of <string.h>.
The memcpy_s() detect the following Runtime-constraints:
1. dest or src object is a null pointer.
2. destmax is greater than RSIZE_MAX.
3. n (number of character want to copy) is greater than RSIZE_MAX.
4. n is greater than destmax .
5. Copying take place between objects that overlap.
Recommended Post:
- C Programming Courses And Tutorials.
- CPP Programming Courses And Tutorials.
- Python Courses and Tutorials.
- Use of memcpy in C.
- Implement own memmove in C.
- memmove vs memcpy.
- strcpy in C
- How to Use strncpy() and implement own strncpy().
- strdup() in C.
- strerror function in C.
- Use of memcmp function with example code.
- How to use memcpy and implement own.
- strcoll in C with example code.
- Implement vector in C.