es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Concatenación de caracteres.

Necesito concatenar dos caracteres y enviarlos como argumento a una función, pero strcat desplaza los caracteres concatenados al primer carácter. Necesito un método que devuelva los caracteres concatenados. ¿O si puedo hacerlo de otra manera, cómo puedo hacerlo?

void abca(char *a)
{
  Serial.println(a);
}

void setup()
{
  Serial.begin(9600);

  char *bb = "1";
  char *aa = "2";
  abca(strcat(aa, bb));

}

Editar: Estoy creando un programa para Arduino y no puedo usar strings. Los strings utilizan mucha memoria. Desafortunadamente, Arduino solo tiene 2kB.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para concatenar dos caracteres y enviarlos como argumento a una función sin utilizar la función strcat, se puede utilizar el operador de concatenación de cadenas “+” en C++. Esto creará una nueva cadena y la devolverá como resultado concatenado. Aquí hay un ejemplo:

    void abca(char *a)
    {
      Serial.println(a);
    }
    
    void setup()
    {
      Serial.begin(9600);
    
      char bb[] = "1";
      char aa[] = "2";
      char* result = new char[strlen(bb) + strlen(aa) + 1];
      strcpy(result, aa);
      strcat(result, bb);
      abca(result);
    }
    

    Primero, necesitará crear una nueva matriz de caracteres lo suficientemente grande como para contener ambas cadenas que desea concatenar más un terminador nulo. Luego, puede utilizar la función strcpy para copiar la primera cadena en la nueva matriz y la función strcat para agregar la segunda cadena. Finalmente, puede pasar el resultado concatenado como argumento a su función.

    Tenga en cuenta que este método puede causar problemas de gestión de memoria si no se implementa correctamente, especialmente si se utiliza la misma matriz una y otra vez. Asegúrese de liberar la memoria una vez que ya no sea necesaria.

    En el ejemplo anterior, usamos new para asignar memoria, por lo que debemos delete al final de setup():

    delete[] result;
    

    Tenga en cuenta que esta llamada delete debe retrasarse tanto como sea posible, dependiendo de la aplicación.

Comments are closed.