Funktionen mit String-Parametern

11

In meiner Hauptschleife befindet sich diese Zeichenfolge:

String string1;

Ich habe eine Funktion, die string1 als Parameter verwendet und damit diesen String als SMS sendet.

sendSMS(string1);

Dies ist die Funktion sendSMS () (ohne Parameter):

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

Meine Fragen sind:

  1. Wie füge ich den String-Eingabeparameter in sendSMS ein?
  2. Muss ich auch einen Funktionsprototyp für sendSMS () verwenden? (so dass es dreimal erscheint, 1 im Prototyp, 1 in der Deklaration und eins im Aufruf). Oder muss ich vor der Hauptschleife () keinen Funktionsprototyp verwenden?
user1584421
quelle

Antworten:

10
  1. Nur ändern

    void sendSMS()

    zu

    void sendSMS(const String& thisIsAString)

    Sie können dann mit auf den Parameter innerhalb der Funktion zugreifen thisIsAString.

  2. Nein, Sie benötigen keinen Prototyp.

Der Typ mit dem Hut
quelle
8
Ich würde eher empfehlen, den String als Referenz zu übergeben, um zu vermeiden, dass zusätzlicher Code für nichts ausgeführt wird (Kopierkonstruktor, Destruktor): void sendSMS(String& thisIsAString)oder noch besser, eine konstante Referenz, wenn das String-Argument nicht durch die Funktion geändert werden soll:void sendSMS(const String& thisIsAString)
jfpoilpret
2

Ich würde sagen, nie wieder String zu verwenden. Wenn der Code größer wird und die Speichernutzung kritisch ist, stoßen Sie auf eine Sackgasse. Ich weiß, dass es bequemer ist, aber geben Sie Char Arrays eine Chance. Etwas wie:

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;
}

Ich habe die Funktion in bool geändert. Dies bedeutet, dass Sie es in einer if-Anweisung verwenden können, in der Sie es vervollständigen möchten, bevor Sie mit Ihrem Code fortfahren.

Sie müssen dem Array selbst Speicher zuweisen. deklariere es so:

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

Hier ordne ich 32 Bytes für Daten und ein zusätzliches Byte für das Zeichen zu, das "Ende der Zeichenfolge" bedeutet (es ist das \ 0).

dBm
quelle
0

Du kannst ändern

void sendSMS()

zu

void sendSMS(String myinputstring)

Sie können myinputstring in Ihrem Code verwenden.

Pythonosck
quelle
Das ist nur eine Wiederholung der anderen Antwort.
Sempaiscuba