Función strcpy de Arduino

Ammar Ali 12 octubre 2023
Función strcpy de Arduino

En este tutorial, discutiremos cómo copiar una cadena de una variable a otra usando la función strcpy() en Arduino.

Función strcpy() de Arduino

La función strcpy() puede copiar una cadena que incluya el carácter nulo de una variable a otra. La sintaxis básica de la función strcpy() se muestra a continuación.

output = strcpy(dest, source);

La primera entrada de la función strcpy() debería tener el tipo de datos char, y la segunda entrada debería ser el tipo de datos const char. Esta función devolverá la cadena copiada como una cadena de caracteres.

Si el tamaño de destino excede el tamaño de origen, la función strcpy() también agregará un carácter NUL como terminador dentro de la cadena de destino. Si la cadena de destino ya tiene una cadena almacenada, la nueva cadena sobrescribirá la cadena anterior.

Por ejemplo, definamos una cadena y copiémosla en otra variable usando la función strcpy(). Vea el código a continuación.

void setup() {
  const char* source = "Hello World";
  char destination[17];
  Serial.begin(9600);
  strcpy(destination, source);
  Serial.println(destination);
}
void loop() {}

Producción :

Hello World

En el código anterior, usamos el monitor serie de Arduino para imprimir la cadena, que se almacena dentro de la variable destination. La longitud de la variable destination debe ser lo suficientemente grande como para contener toda la cadena source.

Si la longitud es menor que la cadena source, el resultado cambiará y la función strcpy() tendrá un comportamiento indefinido.

Debido a la diferencia en el tamaño de las cadenas source y destination, la función strcpy() se desbordará, lo que provocará problemas en el código. Arduino no mostrará un error debido al desbordamiento, y puede llevar un tiempo resolver el problema.

Por ejemplo, cambiemos el tamaño de la variable destination a 5, que es 17 en el código anterior, y comprobemos el resultado. Vea el código a continuación.

void setup() {
  const char* source = "Hello World";
  char destination[5];
  Serial.begin(9600);
  strcpy(destination, source);
  Serial.println(destination);
}
void loop() {}

Producción :

Èõüÿ

Como podemos ver en el resultado anterior, el resultado ha cambiado porque el tamaño de la variable destination es menor que el de la variable source. Para un buen resultado, debemos asegurarnos de que el tamaño de la variable destination sea mayor que el tamaño de la variable source.

Podemos usar la versión de longitud limitada de la función strcpy() que es strncpy(). La función strncpy() también copia la cadena source en la variable destination, pero también toma la longitud del destino como entrada.

La función strncpy() escribirá caracteres NUL para llenar el espacio restante de la cadena de destination solo si se encuentra un carácter NUL de la cadena de source. Si la cadena source no tiene un carácter NUL, la cadena destination no terminará con un carácter NUL.

Por ejemplo, repitamos el ejemplo anterior usando la función strncpy(). Vea el código a continuación.

void setup() {
  const char* source = "Hello World";
  char destination[5];
  Serial.begin(9600);
  strncpy(destination, source, sizeof(destination));
  Serial.println(destination);
}
void loop() {}

Producción :

Hello

La salida de este ejemplo contiene los primeros 5 caracteres de la source. Entonces, si usamos la función strncpy(), no tenemos que preocuparnos por el desbordamiento de la función porque strncpy() copiará el número de caracteres de la source de acuerdo con el tamaño del destination.

Esta función también es útil cuando no queremos copiar toda la cadena y solo queremos copiar algunos caracteres del origen al destino. Las funciones strcpy() y strncpy() también devuelven la cadena copiada de tipo char.

También hay otra versión de longitud limitada de la función strcpy() que es la función strlcpy(). La función strlcpy() es la misma que la función strncpy() y la diferencia es que la salida de la función strlcpy() es la longitud de la cadena de origen.

A diferencia de la función strncpy(), la función strlcpy() no escribe varios caracteres NUL para llenar el espacio restante de la cadena de destination, y solo escribe un único carácter NUL en la cadena de destination. La cadena de destination siempre terminará con un solo carácter NUL utilizando la función strlcpy().

Los caracteres almacenados dentro de la cadena destination también incluirán el carácter NUL. Por ejemplo, si el tamaño de la cadena destination es 5, solo podemos copiar cuatro caracteres debido al carácter NUL.

Así que tenemos que aumentar el tamaño de la cadena destination a 6 para copiar 5 caracteres en ella. Sin embargo, este no es el caso con las funciones strcpy() y strncpy() que solo agregan un carácter NUL si el tamaño de la cadena destination es mayor que el tamaño de la cadena source.

Por ejemplo, repitamos el ejemplo anterior usando la función strlcpy(). Vea el código a continuación.

void setup() {
  const char* source = "Hello World";
  char destination[5];
  Serial.begin(9600);
  strlcpy(destination, source, sizeof(destination));
  Serial.println(destination);
}
void loop() {}

Producción :

Hell

Como podemos ver en la salida, se han copiado cuatro caracteres de la cadena source en el destination, incluso si el tamaño del destination es 5. Esto se debe a que la función strlcpy() también agregó el carácter NUL en el final de la cadena destination.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - Arduino String