带字符串参数的函数


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.