Funciones con parámetros de cadena


11

Dentro de mi bucle principal hay esta cadena:

String string1;

Tengo una función que tomará string1 como parámetro y la usaré para enviar esta cadena como SMS.

sendSMS(string1);

Esta es la función sendSMS () (sin parámetros):

void sendSMS()
{ sms.beginSMS(remoteNumber);
  sms.print(finalstr);
  sms.endSMS();
  lcd.setCursor(0, 0);
  lcd.print("Message sent!");
  delay(10000); 
}

Mis preguntas son:

  1. ¿Cómo pongo el parámetro de entrada de cadena en sendSMS?
  2. ¿También necesito usar un prototipo de función para sendSMS ()? (para que aparezca tres veces, 1 en el prototipo, 1 en la declaración y uno en la llamada). ¿O no necesito usar el prototipo de función antes del bucle principal ()?

Respuestas:


10
  1. Solo cambia

    void sendSMS()

    a

    void sendSMS(const String& thisIsAString)

    Luego puede acceder al parámetro dentro de la función con thisIsAString.

  2. No, no necesitas un prototipo.


8
Prefiero recomendar pasar la Cadena por referencia, para evitar que se ejecute código adicional para nada (copy-constructor, destructor): void sendSMS(String& thisIsAString)o mejor aún, una referencia constante, si la función no modifica el argumento de cadena:void sendSMS(const String& thisIsAString)
jfpoilpret

2

Yo diría que nunca vuelva a usar String. Cuando el código crezca y el uso de memoria sea crítico, llegarás a un callejón sin salida. Sé que es más conveniente, pero dale una oportunidad a las matrices de char. Algo como:

bool sendSMS(int remoteNumber, char *finalstr){
  bool isFinished = 0;
  sms.beginSMS(remoteNumber);
  for (int i=0;i<sizeof(finalstr);i++){
      sms.print(finalstr);
  }
  sms.endSMS();
  lcd.setCursor(0, 0);
  lcd.print("Message sent!");
  delay(10000);
  isFinished = 1;
  return isFinished;
}

Cambié la función a bool. Significa que puede usarlo dentro de una instrucción if, donde desea que se complete antes de continuar con su código.

Deberá asignar memoria usted mismo para la matriz; declararlo así:

char stringArray[33] = {'\0'};

Aquí, asigno 32 bytes para datos y un byte adicional para el carácter que significa "fin de cadena" (es eso \ 0).


0

Tu puedes cambiar

void sendSMS()

a

void sendSMS(String myinputstring)

puedes usar myinputstring en tu código.


Eso es solo una repetición de la otra respuesta.
sempaiscuba
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.