Otázka:
Funkce s parametry řetězce
user1584421
2014-06-24 20:48:58 UTC
view on stackexchange narkive permalink

Uvnitř mé hlavní smyčky je tento řetězec:

  String string1;  

Mám funkci, která vezme řetězec1 jako parametr a použije jej odeslat tento řetězec jako SMS.

  sendSMS (string1);  

Toto je funkce sendSMS () (bez parametrů):

  void sendSMS () {sms.beginSMS (remoteNumber); sms tisk (finalstr); sms.endSMS (); lcd.setCursor (0, 0); lcd.print ("Zpráva odeslána!"); zpoždění (10 000); }  

Moje otázky jsou:

  1. Jak vložím vstupní parametr řetězce do sendSMS?
  2. Musím také použít funkční prototyp pro sendSMS ()? (tak, že se objeví třikrát, 1 v prototypu, 1 v prohlášení a jeden ve volání). Nebo nemusím před hlavní smyčkou () používat prototyp funkce?
Tři odpovědi:
The Guy with The Hat
2014-06-24 21:46:54 UTC
view on stackexchange narkive permalink
  1. Stačí změnit

      void sendSMS ()  

    na

      void sendSMS ( const String& thisIsAString)  

    Potom můžete přistupovat k parametru uvnitř funkce pomocí thisIsAString.

  2. Ne, nepotřebujete prototyp.

Raději bych doporučil předat řetězec podle odkazu, aby se zabránilo dalšímu kódu, který má být proveden za nic (copy-constructor, destructor): `void sendSMS (String & thisIsAString)` nebo ještě lépe, odkaz na const, pokud argument řetězce není má být změněno funkcí: `void sendSMS (const String & thisIsAString)`
dBm
2018-09-22 23:45:16 UTC
view on stackexchange narkive permalink

Řekl bych, že už nikdy nebudu String používat. Když se kód zvětší a využití paměti bude kritické, narazíte do slepé uličky. Vím, že je to pohodlnější, ale pokuste se o char pole. Něco jako:

  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 ("Zpráva odeslána!"); zpoždění (10 000); isFinished = 1; return isFinished;}  

Změnil jsem funkci na bool. Znamená to, že jej můžete použít uvnitř příkazu if, kde byste jej chtěli dokončit, než budete pokračovat s kódem.

Budete si muset pole přidělit sami; deklarovat to takto:

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

Zde přidělím 32 bajtů pro data a jeden další bajt pro znak, který znamená „konec řetězce“ (to je \ 0).

pythosanck
2018-09-21 17:47:17 UTC
view on stackexchange narkive permalink

Můžete změnit

void sendSMS ()

na

void sendSMS (String myinputstring) kód>

ve svém kódu můžete použít řetězec řetězce.

To je jen opakování jiné odpovědi.
Neopakování druhé odpovědi. Tenhle je * kopií *, ne * referencí *. Upřednostňujte druhou odpověď, abyste zabránili kopírování objektu.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...