Concatena String e Int in C

Jinku Hu 12 ottobre 2023
  1. Usa le funzioni asprintf, strcat e strcpy per concatenare String e Int in C
  2. Usa le funzioni asprintf e memccpy per concatenare String e Int in C
Concatena String e Int in C

Questo articolo mostrerà più metodi per concatenare string e int in C.

Usa le funzioni asprintf, strcat e strcpy per concatenare String e Int in C

Il primo passo per concatenare la variabile int e la stringa di caratteri è convertire un intero in stringa. Utilizziamo la funzione asprintf per memorizzare il numero intero passato come stringa di caratteri. asprintf fa parte dell’estensione della libreria GNU C e potrebbe non essere disponibile in altre implementazioni. Funziona in modo simile a sprintf tranne per il fatto che il buffer della stringa di caratteri di destinazione viene allocato dinamicamente utilizzando internamente la chiamata alla funzione malloc e il puntatore restituito dovrebbe essere liberato prima dell’uscita del programma. Una volta convertito il numero intero, concateniamo le chiamate strcpy e strcat per concatenare due date stringhe di caratteri nel buffer che l’utente alloca. In questo caso, abbiamo definito arbitrariamente la macro MAX per indicare la dimensione del buffer di destinazione, ma in scenari reali sarebbe più flessibile usare malloc.

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

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
  const char *str1 = "hello there";
  int n1 = 1234;

  char *num;
  char buffer[MAX];

  if (asprintf(&num, "%d", n1) == -1) {
    perror("asprintf");
  } else {
    strcat(strcpy(buffer, str1), num);
    printf("%s\n", buffer);
    free(num);
  }

  exit(EXIT_SUCCESS);
}

Produzione:

hello there1234

In alternativa, le chiamate concatenate possono essere seguite da un’altra invocazione della funzione strcat e aggiungere altre stringhe al buffer char dato. Notare che controlliamo la funzione asprintf per il valore restituito con successo e, se fallisce, continuiamo con il processo di concatenazione.

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

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
  const char *str1 = "hello there";
  int n1 = 1234;

  char *num;
  char buffer[MAX];

  if (asprintf(&num, "%d", n1) == -1) {
    perror("asprintf");
  } else {
    strcat(strcpy(buffer, "Hello there, "), num);
    strcat(buffer, "! continued");
    printf("%s\n", buffer);
    free(num);
  }

  exit(EXIT_SUCCESS);
}

Produzione:

Hello there, 1234! continued

Usa le funzioni asprintf e memccpy per concatenare String e Int in C

In alternativa, asprintf può essere usato insieme a memccpy per concatenare la stringa di caratteri e int. memccpy fa parte delle utilità per le stringhe della libreria standard C definite nel file di intestazione <string.h>. Ci vogliono due puntatori che denotano i buffer di origine e di destinazione. Notare che queste aree di memoria buffer non dovrebbero sovrapporsi; in caso contrario, i risultati non sono definiti. Gli ultimi due argomenti rappresentano il carattere in corrispondenza del quale interrompere la copia e il numero massimo di byte da prelevare dalla posizione di origine. Chiamiamo la funzione free nell’ambito else poiché altrimenti, non possiamo essere sicuri che il puntatore num sia il puntatore valido.

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

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
  const char *str1 = "hello there";
  int n1 = 1234;

  char *num;
  char buffer[MAX];

  if (asprintf(&num, "%d", n1) == -1) {
    perror("asprintf");
  } else {
    memccpy(memccpy(buffer, str1, '\0', MAX) - 1, num, '\0', MAX);
    printf("%s\n", buffer);
    free(num);
  }

  exit(EXIT_SUCCESS);
}

Produzione:

hello there1234
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