Konkatenering av strängar

Konkatenering av C-strängar är en ganska enkel procedur. Man skriver helt enkelt alla tecken från en viss sträng på slutet av en annan. Man kan göra en enkel funktion för konkatenering av två strängar på följande sätt:

#include <iostream>

void concat (char * Source, char * Destination) {
  // beräkna slutet på destinationssträngen
  unsigned int Start = strlen ( Destination );
  
  // iterera över och kopiera alla tecken
  for ( unsigned int Index = 0; Index <= strlen ( Source ); Index++ ) {
    // kopiera ett tecken
    Destination[Start + Index] = Source[Index];
  }
}
  
int main () {
  char Destination[100] = "En exempelsträng";
  char Source [] = ", och en annan";

  // utför kopieringen 
  copy ( Source, Destination ); 

  cout << "Source      = '" << Source<< "', " << endl
       << "Destination = '" << Destination << "'" << endl;
}

Funktionen concat() kopierar helt enkelt strängen Source till slutet på Destination med början från den position där terminatortecknet finns. Ingen kontroll görs att Destination är tillräckligt lång. Här gäller samma som för kopiering av strängar (se avsnittet Kopiering av strängar), d.v.s. att om Destination är för kort uppstår olika typer av fel. Kör man programmet ovan får man:

% ./CStringConcat1
Source      = ', och en annan', 
Destination = 'En exempelsträng, och en annan'
%

Även för denna funktionalitet finns det färdiga funktioner i <string.h>. Konkatenering kan göras med funktionen strcat(). Denna tar samma parametrar som vår concat, men i omvänd ordning. Vårt program ovan kunde kortare skrivas:

#include <iostream>
#include <string.h>
  
int main () {
  char Destination[100] = "En exempelsträng";
  char Source [] = ", och en annan";

  // utför kopieringen 
  strcat ( Destination, Source ); 

  cout << "Source      = '" << Source<< "', " << endl
       << "Destination = '" << Destination << "'" << endl;
}

Vill man vara säker på att den konkatenerade strängen ryms måste man manuellt beräkna längderna på de involverade strängarna och kontrollera att de är tillräckliga.

En version av strcat() som endast konkatenerar ett visst antal tecken finns även, och den heter strncat(). Denna har en tredje parameter som anger antalet tecken som skall kopieras. Funktionen strncat() sätter alltid ett terminatortecken i slutet på Destination.