Ayuda con código en C++

Hola, podrían ayudarme a solucionar un par de dudas que tengo:

  • Lo que pasa es que quiero crear un método que retorne una cadena de caracteres(un nombre de usuario o un pass por ej.), ¿Alguien podría explicarme cómo podría hacerlo?...
  • Quiero también hacer otro método que reciba un arreglo de caracteres como parámetro, pero no sé exactamente cómo pasar un arreglo de caracteres como parámetro, ¿Podría alguien explicarme cómo se hace?

Porfa.. ayuda :frowning:

Hola.
La respuesta inmediata para ambas preguntas podría ser esta:

void setup()
{
Serial.begin(9600);
char *nombre="Pepito";
char *micadena=retornoCadena(nombre);
Serial.println(micadena);
}

void loop()
{
}

char *retornoCadena(char *cadena1){
char buffer[50]="Hola, ";
strcat(buffer, cadena1);
return(buffer);
}

PEEEEEEEEERO...
Estás devolviendo una cadena de caracteres que se crea en la pila dentro de la función retornoCadena, y que tras regresar de ella puede ser sobrescrita por otras variables, pues se entiende que la función y sus variables ya "han acabado", así que probablemente la cadena devuelta se corrompa con cualquier código posterior a la llamada a la función. Puedes "apartar" memoria desde dentro de la función con calloc(). Es lo que llamamos asignación dinámica de memoria; pero si no la liberas adecuadamente, cada llamada a la función irá acumulando memoria ocupada hasta que llenes toda y... crash. En resumen, opción más compleja que sólo utilizaría si realmente es necesario.

Si no necesitas asignación dinámica (durante la vida del programa sólo va a haber una cadena que luego puedes sobrescribir con los datos nuevos) puedes definir char buffer[tamaño] como variable global; pero entonces no tiene sentido que tu función devuelva el puntero, pues la variable buffer está accesible para todo el programa.

char buffer[50]="Hola, ";

void setup()
{
Serial.begin(9600);
retornoCadena("Pepito");
Serial.println(buffer);
}

void loop()
{
}

void retornoCadena(char *cadena1){
strcat(buffer, cadena1);
}

Una tercera vía que te permitiría llamar a la función y que escriba en distintos buffers, sería enviarle el buffer sobre el que quieres escribir como un parámetro más, es decir en lugar de esperar que la función cree un papel, escriba sobre él y te lo entregue, enviarle tú el papel, que la función lo escriba, y ver cómo quedó el papel :slight_smile:

void setup()
{
char buffera[50]="Hola, ";
char bufferb[50]="adios ";
Serial.begin(9600);
retornoCadena(buffera, "Pepito");
retornoCadena(bufferb, "Juan");
Serial.println(buffera);
Serial.println(bufferb);
}

void loop()
{
}

void retornoCadena(char *cadena, char *cadena1){
strcat(cadena, cadena1);
}

Igual te he liado más que aclarado. Por ello siempre decimos que expongáis vuestras ideas de la forma más detallada posible, y a poder ser con vuestro código, porque se pueden apuntar mejor las respuestas.

Gracias, aunque me lió un poco al principio de verdad, me ha ayudado lo que me has mandado complementándolo con otra info que encontré. :slight_smile: