Open In App

strncat() function in C/C++

Last Updated : 12 Oct, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

In C/C++, strncat() is a predefined function used for string handling. string.h is the header file required for string functions.
This function appends not more than n characters from the string pointed to by src to the end of the string pointed to by dest plus a terminating Null-character. The initial character of the string(src) overwrites the Null-character present at the end of a string(dest). Thus, the length of the string(dest) becomes strlen(dest)+n. But, if the length of the string(src) is less than n, only the content up to the terminating null-character is copied and the length of the string(dest) becomes strlen(src) + strlen(dest).
The behavior is undefined if –

  • The strings overlap.
  • The dest array is not large enough to append the contents of src.

Syntax: 

char *strncat(char *dest, const char *src, size_t n)

Parameters: This method accepts the following parameters: 

  • dest: the string where we want to append.
  • src: the string from which ‘n’ characters are going to append.
  • n: represents a maximum number of characters to be appended. size_t is an unsigned integral type.

Return Value: The strncat() function shall return the pointer to the string(dest). 

Application 
Given two strings src and dest in C++, we need to append ‘n’ character from src to dest, let’s say n=5.

Examples:  

Input:  src = "world"
        dest = "Hello "
Output: "Hello world"

Input:  src = "efghijkl"
        dest = "abcd"
Output: "abcdefghi"

Program:  

C++




// C,C++ program demonstrate difference between
// strncat() and strcat()
#include <cstring>
#include <iostream>
using namespace std;
 
int main()
{
   
   // Take any two strings
   char src[50] = "forgeeks";
   char dest1[50] = "geeks";
   char dest2[50] = "geeks";
  
   cout << "Before strcat() function execution, ";
   cout << "destination string : "<< dest1 << endl;
    
   // Appends the entire string of src to dest1
   strcat(dest1, src);
  
   // Prints the string
   cout << "After strcat() function execution, ";
   cout << "destination string : "<< dest1 << endl;
  
   cout << "Before strncat() function execution, ";
   cout << "destination string : "<< dest2 << endl;
    
   // Appends 3 characters from src to dest2
   strncat(dest2, src, 3);
     
   // Prints the string
   cout << "After strncat() function execution, ";
   cout << "destination string : "<< dest2 << endl;
    
   return 0;
}
 
// this code is contributed by shivanisinghss2110


C




// C,C++ program demonstrate difference between
// strncat() and strcat()
#include <stdio.h>
#include <string.h>
 
int main()
{
   
   // Take any two strings
   char src[50] = "forgeeks";
   char dest1[50] = "geeks";
   char dest2[50] = "geeks";
  
   printf("Before strcat() function execution, ");
   printf("destination string : %s\n", dest1);
    
   // Appends the entire string of src to dest1
   strcat(dest1, src);
  
   // Prints the string
   printf("After strcat() function execution, ");
   printf("destination string : %s\n", dest1);
  
   printf("Before strncat() function execution, ");
   printf("destination string : %s\n", dest2);
    
   // Appends 3 characters from src to dest2
   strncat(dest2, src, 3);
     
   // Prints the string
   printf("After strncat() function execution, ");
   printf("destination string : %s\n", dest2);
    
   return 0;
}


Output: 

Source string : efghijkl
Destination string : abcdefghi

How strncat() is different from strcat() ?
It is recommended by many of the programmers that strncat() is safe as compared to strcat() because strcat() does not check for the size of the copied data, and copies until it gets to a null terminator, it might cause a buffer overflow while strncat() check for the size of the copied data, and will copy only ‘n’ bytes.

C++




// C,C++ program demonstrate difference between
// strncat() and strcat()
#include <cstring>
#include <iostream>
using namespace std;
 
int main()
{
   
   // Take any two strings
   char src[50] = "forgeeks";
   char dest1[50] = "geeks";
   char dest2[50] = "geeks";
  
   cout << "Before strcat() function execution, ";
   cout << "destination string : "<< dest1 << endl;
    
   // Appends the entire string of src to dest1
   strcat(dest1, src);
  
   // Prints the string
   cout << "After strcat() function execution, ";
   cout << "destination string : "<< dest1 << endl;
  
   cout << "Before strncat() function execution, ";
   cout << "destination string : "<< dest2 << endl;
    
   // Appends 3 characters from src to dest2
   strncat(dest2, src, 3);
     
   // Prints the string
   cout << "After strncat() function execution, ";
   cout << "destination string : "<< dest2 << endl;
    
   return 0;
}
 
// this code is contributed by shivanisinghss2110


C




// C,C++ program demonstrate difference between
// strncat() and strcat()
#include <stdio.h>
#include <string.h>
 
int main()
{
   
   // Take any two strings
   char src[50] = "forgeeks";
   char dest1[50] = "geeks";
   char dest2[50] = "geeks";
  
   printf("Before strcat() function execution, ");
   printf("destination string : %s\n", dest1);
    
   // Appends the entire string of src to dest1
   strcat(dest1, src);
  
   // Prints the string
   printf("After strcat() function execution, ");
   printf("destination string : %s\n", dest1);
  
   printf("Before strncat() function execution, ");
   printf("destination string : %s\n", dest2);
    
   // Appends 3 characters from src to dest2
   strncat(dest2, src, 3);
     
   // Prints the string
   printf("After strncat() function execution, ");
   printf("destination string : %s\n", dest2);
    
   return 0;
}


Output: 

Before strcat() function execution, destination string : geeks
After strcat() function execution, destination string : geeksforgeeks
Before strncat() function execution, destination string : geeks
After strncat() function execution, destination string : geeksfor

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads