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 ()?
pengguna1584421
sumber

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.

The Guy with The Hat
sumber
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).

dBm
sumber
0

Anda bisa berubah

void sendSMS()

untuk

void sendSMS(String myinputstring)

Anda dapat menggunakan myinstrstring dalam kode Anda.

pythosanck
sumber
Itu hanya pengulangan dari jawaban yang lain.
sempaiscuba