Hàm với tham số chuỗi


11

Trong vòng lặp chính của tôi có chuỗi này:

String string1;

Tôi có một hàm sẽ lấy chuỗi1 làm tham số và sử dụng nó để gửi chuỗi này dưới dạng SMS.

sendSMS(string1);

Đây là hàm sendSMS () (không có tham số):

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

Câu hỏi của tôi là:

  1. Làm cách nào để đặt tham số đầu vào chuỗi trong sendSMS?
  2. Tôi cũng cần phải sử dụng một nguyên mẫu hàm cho sendSMS ()? (để nó xuất hiện ba lần, 1 trong nguyên mẫu, 1 trong khai báo và một trong cuộc gọi). Hoặc tôi không cần sử dụng nguyên mẫu hàm trước vòng lặp chính ()?

Câu trả lời:


10
  1. Chỉ là sự thay đổi

    void sendSMS()

    đến

    void sendSMS(const String& thisIsAString)

    Sau đó bạn có thể truy cập tham số bên trong hàm với thisIsAString.

  2. Không, bạn không cần một nguyên mẫu.


8
Tôi muốn khuyên nên truyền Chuỗi bằng tham chiếu, để tránh mã bổ sung được thực thi mà không có gì (copy-constructor, hàm hủy): void sendSMS(String& thisIsAString)hoặc thậm chí tốt hơn, tham chiếu const, nếu đối số chuỗi không được sửa đổi bởi hàm:void sendSMS(const String& thisIsAString)
jfpoilpret

2

Tôi muốn nói rằng đừng bao giờ sử dụng String nữa. Khi mã trở nên lớn hơn và việc sử dụng bộ nhớ sẽ rất quan trọng, bạn sẽ rơi vào ngõ cụt. Tôi biết nó thuận tiện hơn, nhưng hãy thử các mảng char. Cái gì đó như:

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

Tôi đã thay đổi chức năng thành bool. Điều đó có nghĩa là bạn có thể sử dụng nó trong câu lệnh if, nơi bạn muốn nó hoàn thành trước khi tiếp tục với mã của mình.

Bạn sẽ cần phải tự phân bổ bộ nhớ cho mảng; tuyên bố như thế này:

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

Ở đây, tôi phân bổ 32 byte cho dữ liệu và một byte bổ sung cho ký tự có nghĩa là "kết thúc chuỗi" (đó là \ 0).


0

Bạn có thể thay đổi

void sendSMS()

đến

void sendSMS(String myinputstring)

bạn có thể sử dụng chuỗi myinput trong mã của bạn.


Đó chỉ là sự lặp lại của câu trả lời khác.
sempaiscuba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.