带字符串参数的函数


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()使用函数原型吗?(因此它出现了3次,在原型中出现1次,在声明中出现1次,在调用中出现1次)。还是在主loop()之前不需要使用函数原型?

Answers:


10
  1. 只是改变

    void sendSMS()

    void sendSMS(const String& thisIsAString)

    然后,您可以使用来访问函数内部的参数thisIsAString

  2. 不,您不需要原型。


8
我宁愿建议按引用传递字符串,以避免不必要地执行其他代码(复制构造函数,析构函数):void sendSMS(String& thisIsAString)或者,如果字符串参数不希望通过函数修改,则最好使用const引用:void sendSMS(const String& thisIsAString)
jfpoilpret

2

我说不要再使用String了。当代码变大并且内存使用变得至关重要时,您将陷入困境。我知道它更方便,但可以尝试一下char数组。就像是:

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

我将功能更改为bool。这意味着您可以在if语句内使用它,然后在继续执行代码之前希望它在此完成。

您将需要为数组分配内存。这样声明:

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

在这里,我为数据分配了32个字节,为表示“字符串结尾”(即\ 0)的字符分配了另外一个字节。


0

你可以改变

void sendSMS()

void sendSMS(String myinputstring)

您可以在代码中使用myinputstring。


这只是其他答案的重复。
sempaiscuba
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.