Функції зі строковими параметрами


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 у декларації та одна у виклику). Або мені не потрібно використовувати прототип функції перед основним циклом ()?

Відповіді:


10
  1. Просто змінити

    void sendSMS()

    до

    void sendSMS(const String& thisIsAString)

    Потім можна отримати доступ до параметра всередині функції за допомогою thisIsAString.

  2. Ні, прототип вам не потрібен.


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

2

Я б сказав ніколи більше не використовувати String. Коли код збільшується і використання пам'яті стане критичним, ви потрапите в тупик. Я знаю, що це зручніше, але дайте знімки char. Щось на зразок:

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 у своєму коді.


Це лише повторення іншої відповіді.
sempaiscuba
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.