strcat()

Updated: April 19, 2023

Concatenate two strings

Synopsis:

#include <string.h>

char* strcat( char* dst, 
              const char* src );

Arguments:

dst, src
The strings that you want to concatenate.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The strcat() function appends a copy of the string pointed to by src (including the terminating NUL character) to the end of the string pointed to by dst. The first character of src overwrites the NUL character at the end of dst.

Returns:

The same pointer as dst.

Examples:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main( void )
{
    char buffer[80];

    strcpy( buffer, "Hello " );
    strcat( buffer, "world" );

    printf( "%s\n", buffer );
    
    return EXIT_SUCCESS;
}

produces the output:

Hello world

Environment variables:

LIBC_STRINGS
On certain targets, you can use this environment variable to select the implementation of strcat(). The value is one of the strings given below.
  • for AArch64 targets:
    • aarch64_neon — optimized for AARCH64 targets using NEON
    • generic — the default
  • for ARMv7 targets:
    • cortex_a9 — optimized for the ARM Cortex-A9 processor; assumes that no unaligned access is supported
    • cortex_a9_aligned — optimized for ARM Cortex-A9; requires that unaligned memory access be enabled on the platform. If memory access is misaligned, this implementation falls back to the NEON version.
    • cortex_a9_neon — optimized for ARM Cortex-A9 using NEON
    • generic — the default
    • krait — optimized for the Qualcomm Krait CPU
    • krait_neon — optimized for Qualcomm Krait using NEON

Processes that register ISRs shouldn't use the NEON versions.

Classification:

ANSI, POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler Read the Caveats
Signal handler Yes
Thread Yes

Caveats:

Implementations of strcat() that are optimized using SIMD instructions aren't safe to use in an interrupt handler. These include the NEON implementations on ARMv7 and AArch64.