Stringhe concatenate in C

Jinku Hu 12 ottobre 2023
  1. Usa le funzioni strcat e strcpy per concatenare le stringhe in C
  2. Usa la funzione memccpy per concatenare le stringhe in C
  3. Utilizzare la funzione definita personalizzata per concatenare valori letterali stringa in C
Stringhe concatenate in C

Questo articolo spiegherà diversi metodi su come concatenare le stringhe in C.

Usa le funzioni strcat e strcpy per concatenare le stringhe in C

strcat fa parte delle strutture per le stringhe della libreria standard C definite nell’intestazione <string.h>. La funzione accetta due argomenti char* e aggiunge la stringa memorizzata nel secondo puntatore a quella nel primo puntatore. Poiché le stringhe in stile C terminano con il carattere \0, strcat inizia ad aggiungersi alla stringa di destinazione a partire dal carattere nullo. Infine, la fine di una stringa appena costruita termina con il carattere \0. Si noti che il programmatore è responsabile dell’allocazione della memoria sufficiente nel puntatore di destinazione per memorizzare entrambe le stringhe.

La seconda funzione da utilizzare in questa soluzione è strcpy, che allo stesso modo accetta due parametri char* e copia la stringa dal secondo puntatore al primo puntatore. Notare che strcpy è usato per copiare la prima stringa nel buffer char* designato e poi passare il puntatore di destinazione alla funzione strcat.

Entrambe le funzioni restituiscono il puntatore alla stringa di destinazione e ciò rende possibili le chiamate concatenate.

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

#ifndef MAX
#define MAX 100
#endif

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  char buffer[MAX];
  strcat(strcpy(buffer, str1), str2);
  printf("%s\n", buffer);

  char buffer2[MAX];
  strcat(strcpy(buffer2, "Hello there, "), "Josh");
  strcat(buffer2, "!\nTemporary...");
  printf("%s\n", buffer2);

  exit(EXIT_SUCCESS);
}

Produzione:

hello there 1hello there 2
Hello there, Josh!
Temporary...

Usa la funzione memccpy per concatenare le stringhe in C

Il principale svantaggio del metodo precedente è la sua implementazione inefficiente che esegue iterazioni ridondanti sulla prima stringa memorizzata dalla funzione strcpy.

memccpy, d’altra parte, corregge questo problema ed elabora entrambe le stringhe in modo efficiente. memccpy copia non più del numero di byte specificato dall’utente dalla sorgente char*al puntatore di destinazione fermandosi solo quando il carattere dato viene trovato nella stringa sorgente. memccpy restituisce il puntatore all’ultimo carattere memorizzato nel buffer di destinazione. Quindi, due chiamate memccpy possono essere concatenate in modo simile al metodo precedente. La prima stringa viene copiata nel buffer preallocato dall’utente, e la seconda stringa viene aggiunta al puntatore restituito dalla prima chiamata a memccpy.

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

#ifndef MAX
#define MAX 100
#endif

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  char buffer[MAX];
  memccpy(memccpy(buffer, str1, '\0', MAX) - 1, str2, '\0', MAX);

  exit(EXIT_SUCCESS);
}

Produzione:

hello there 1hello there 2

Utilizzare la funzione definita personalizzata per concatenare valori letterali stringa in C

In alternativa, se memccpy non è disponibile sulla tua piattaforma, puoi definire una funzione personalizzata che implementa la stessa routine. concatStrings è l’implementazione di esempio che copia i caratteri da un puntatore a un altro finché non viene trovato il carattere specificato. Nota che specifichiamo il byte nullo \0 come carattere su cui fermarsi in entrambi gli esempi.

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

#ifndef MAX
#define MAX 100
#endif

void* concatStrings(void* restrict dst, const void* restrict src, int c,
                    size_t n) {
  const char* s = src;
  for (char* ret = dst; n; ++ret, ++s, --n) {
    *ret = *s;
    if ((unsigned char)*ret == (unsigned char)c) return ret + 1;
  }
  return 0;
}

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  char buffer[MAX];

  concatStrings(concatStrings(buffer, str1, '\0', MAX) - 1, str2, '\0', MAX);
  printf("%s\n", buffer);

  exit(EXIT_SUCCESS);
}
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C String