Dize parametreleriyle işlevler


11

Benim ana döngü içinde bu dize var:

String string1;

String1 parametre olarak alacak ve bu dize SMS olarak göndermek için kullanacak bir işlevi var.

sendSMS(string1);

Bu sendSMS () işlevidir (parametresiz):

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

Sorularım:

  1. String girdi parametresini sendSMS'ye nasıl koyabilirim?
  2. Ayrıca sendSMS () için bir işlev prototipi kullanmam gerekir mi? (böylece prototipte 1, bildirimde 1 ve çağrıda bir olmak üzere üç kez görünür). Yoksa ana döngü () önce fonksiyon prototipi kullanmak gerekmez?

Yanıtlar:


10
  1. Sadece değiştir

    void sendSMS()

    için

    void sendSMS(const String& thisIsAString)

    Daha sonra ile fonksiyonun içindeki parametreye erişebilirsiniz thisIsAString.

  2. Hayır, bir prototipe ihtiyacınız yok.


8
void sendSMS(String& thisIsAString)Dize argüman işlevi tarafından değiştirilmeyecekse , hiçbir şey (copy-constructor, destructor) için yürütülecek ek kod önlemek için, daha ziyade , bir const başvurusu, önlemek için, başvuru ile String geçmek tavsiye ederim :void sendSMS(const String& thisIsAString)
jfpoilpret

2

Bir daha asla String kullanmadığını söyleyebilirim. Kod büyüdüğünde ve bellek kullanımı kritik olduğunda, çıkmaz bir noktaya gelirsiniz. Daha uygun olduğunu biliyorum, ama char dizilerine bir şans ver. Gibi bir şey:

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

İşlevi boole olarak değiştirdim. Bu, kodunuza devam etmeden önce tamamlanmasını istediğiniz bir if ifadesinin içinde kullanabileceğiniz anlamına gelir.

Dizi için kendiniz bellek ayırmanız gerekir; şöyle ilan et:

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

Burada, veri için 32 bayt ve "dizgenin sonu" anlamına gelen karakter için ek bir bayt ayırıyorum (bu \ 0).


0

Değiştirebilirsin

void sendSMS()

için

void sendSMS(String myinputstring)

myinputstring kodunu kullanabilirsiniz.


Bu sadece diğer cevabın tekrarı.
sempaiscuba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.