C++-manual
Förutgående | Appendix A. C-strängar | Nästa

# 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`.

Förutgående | Hem | Nästa
Kopiering av strängar | Upp | Andra strängrelaterade funktioner