Fungsinya dengan parameter string


11

Di dalam loop utama saya ada string ini:

String string1;

Saya memiliki fungsi yang akan menggunakan string1 sebagai parameter, dan menggunakannya untuk mengirim string ini sebagai SMS.

sendSMS(string1);

Ini adalah fungsi sendSMS () (tanpa parameter):

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

Pertanyaan saya adalah:

  1. Bagaimana cara memasukkan parameter input string ke sendSMS?
  2. Apakah saya juga perlu menggunakan prototipe fungsi untuk sendSMS ()? (sehingga muncul tiga kali, 1 di prototipe, 1 di deklarasi dan satu di panggilan). Atau saya tidak perlu menggunakan prototipe fungsi sebelum loop utama ()?

Jawaban:


10
  1. Ubah saja

    void sendSMS()

    untuk

    void sendSMS(const String& thisIsAString)

    Anda kemudian dapat mengakses parameter di dalam fungsi dengan thisIsAString.

  2. Tidak, Anda tidak perlu prototipe.


8
Saya lebih suka menyarankan untuk melewatkan String dengan referensi, untuk menghindari kode tambahan yang tidak akan dieksekusi (copy-constructor, destructor): void sendSMS(String& thisIsAString)atau bahkan lebih baik, referensi const, jika argumen string tidak akan dimodifikasi oleh fungsi:void sendSMS(const String& thisIsAString)
jfpoilpret

2

Saya akan mengatakan untuk tidak pernah menggunakan String lagi. Ketika kode bertambah besar dan penggunaan memori menjadi sangat penting, Anda akan menemui jalan buntu. Saya tahu ini lebih mudah, tetapi coba beri array array. Sesuatu seperti:

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

Saya mengubah fungsi menjadi bool. Ini berarti bahwa Anda dapat menggunakannya di dalam pernyataan if, di mana Anda ingin menyelesaikannya sebelum melanjutkan dengan kode Anda.

Anda perlu mengalokasikan memori sendiri untuk array; nyatakan seperti ini:

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

Di sini, saya mengalokasikan 32 byte untuk data dan satu byte tambahan untuk karakter yang berarti "akhir dari string" (itu yang \ 0).


0

Anda bisa berubah

void sendSMS()

untuk

void sendSMS(String myinputstring)

Anda dapat menggunakan myinstrstring dalam kode Anda.


Itu hanya pengulangan dari jawaban yang lain.
sempaiscuba
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.