Функции со строковыми параметрами

11

Внутри моего основного цикла есть эта строка:

String string1;

У меня есть функция, которая будет принимать string1 в качестве параметра и использовать его для отправки этой строки в виде SMS.

sendSMS(string1);

Это функция sendSMS () (без параметров):

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

Мои вопросы:

  1. Как поместить параметр ввода строки в sendSMS?
  2. Нужно ли также использовать прототип функции для sendSMS ()? (чтобы он появлялся три раза, 1 в прототипе, 1 в объявлении и один в вызове). Или мне не нужно использовать прототип функции перед основным циклом ()?
user1584421
источник

Ответы:

10
  1. Просто поменяй

    void sendSMS()

    в

    void sendSMS(const String& thisIsAString)

    Затем вы можете получить доступ к параметру внутри функции с помощью thisIsAString.

  2. Нет, вам не нужен прототип.

Парень в шляпе
источник
8
Я бы посоветовал передать String по ссылке, чтобы избежать дополнительного выполнения кода (copy-constructor, destructor): void sendSMS(String& thisIsAString)или, что еще лучше, константной ссылки, если строковый аргумент не должен изменяться функцией:void sendSMS(const String& thisIsAString)
jfpoilpret
2

Я бы сказал, никогда больше не использовать String. Когда код станет больше и использование памяти станет критичным, вы попадете в тупик. Я знаю, что это удобнее, но попробуйте сделать массив символов. Что-то типа:

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

Я изменил функцию на bool. Это означает, что вы можете использовать его в операторе if, где бы вы хотели, чтобы он был завершен, прежде чем продолжить работу с кодом.

Вам нужно будет выделить память для массива самостоятельно; объявить это так:

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

Здесь я выделяю 32 байта для данных и один дополнительный байт для символа, который означает «конец строки» (это \ 0).

дБм
источник
0

Ты можешь измениться

void sendSMS()

в

void sendSMS(String myinputstring)

Вы можете использовать myinputstring в вашем коде.

pythosanck
источник
Это просто повторение другого ответа.
sempaiscuba