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 ()?
usuario1584421
fuente

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.

El chico con el sombrero
fuente
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).

dBm
fuente
0

Tu puedes cambiar

void sendSMS()

a

void sendSMS(String myinputstring)

puedes usar myinputstring en tu código.

Pythosanck
fuente
Eso es solo una repetición de la otra respuesta.
sempaiscuba