ฟังก์ชั่นกับพารามิเตอร์สตริง


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 อีกต่อไป เมื่อโค้ดมีขนาดใหญ่ขึ้นและการใช้หน่วยความจำมีความสำคัญคุณจะต้องหยุดยั้ง ฉันรู้ว่ามันสะดวกกว่า แต่ก็ให้ช็อตอาร์เรย์ สิ่งที่ต้องการ:

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

ฉันเปลี่ยนฟังก์ชั่นเป็นบูล หมายความว่าคุณสามารถใช้มันในคำสั่ง if ซึ่งคุณต้องการให้มันสมบูรณ์ก่อนที่จะดำเนินการกับโค้ดของคุณ

คุณจะต้องจัดสรรหน่วยความจำด้วยตัวคุณเองสำหรับอาเรย์ ประกาศแบบนี้:

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

ที่นี่ฉันจัดสรร 32 ไบต์สำหรับข้อมูลและอีกหนึ่งไบต์สำหรับอักขระที่หมายถึง "จุดสิ้นสุดของสตริง" (นั่นคือ \ 0)


0

คุณสามารถเปลี่ยน

void sendSMS()

ถึง

void sendSMS(String myinputstring)

คุณสามารถใช้ myinputstring ในรหัสของคุณ


นั่นเป็นเพียงการทำซ้ำของคำตอบอื่น ๆ
sempaiscuba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.