Concatenar String e Int en C

Jinku Hu 12 octubre 2023
  1. Utilice las funciones asprintf, strcat y strcpy para concatenar cadenas e int en C
  2. Utilice las funciones asprintf y memccpy para concatenar cadenas e int en C
Concatenar String e Int en C

Este artículo demostrará varios métodos para concatenar string e int en C.

Utilice las funciones asprintf, strcat y strcpy para concatenar cadenas e int en C

El primer paso para concatenar la variable int y la cadena de caracteres es convertir un entero en una cadena. Utilizamos la función asprintf para almacenar el entero pasado como una cadena de caracteres. asprintf es parte de la extensión de la biblioteca GNU C y puede no estar disponible en otras implementaciones. Funciona de manera similar a sprintf excepto que el búfer de cadena de caracteres de destino se asigna dinámicamente usando la llamada a la función malloc internamente, y el puntero devuelto debe liberarse antes de salir del programa. Una vez convertido el entero, encadenamos las llamadas strcpy y strcat para concatenar dos cadenas de caracteres dadas en el búfer que asigna el usuario. En este caso, definimos arbitrariamente la macro MAX para indicar el tamaño del búfer de destino, pero en escenarios reales, sería más flexible utilizar 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);
}

Producción :

hello there1234

Alternativamente, las llamadas encadenadas pueden ir seguidas de otra invocación de la función strcat y agregar otras cadenas al búfer char dado. Tenga en cuenta que verificamos la función asprintf para el valor de retorno exitoso, y si falla, continuamos con el proceso de concatenación.

#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);
}

Producción :

Hello there, 1234! continued

Utilice las funciones asprintf y memccpy para concatenar cadenas e int en C

Alternativamente, asprintf se puede utilizar junto con memccpy para concatenar la cadena de caracteres e int. memccpy es parte de las utilidades de cadena de biblioteca estándar de C definidas en el archivo de encabezado <string.h>. Se necesitan dos punteros que denotan los búferes de origen y destino. Tenga en cuenta que estas áreas de la memoria intermedia no deben superponerse; de lo contrario, los resultados no están definidos. Los dos últimos argumentos representan el carácter en el que dejar de copiar y el número máximo de bytes que se tomarán de la ubicación de origen. Llamamos a la función free en el ámbito else ya que, de lo contrario, no podemos estar seguros de que el puntero num sea el puntero válido.

#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);
}

Producción :

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

Artículo relacionado - C String