Funções com parâmetros de string

11

Dentro do meu loop principal, há esta string:

String string1;

Eu tenho uma função que terá string1 como parâmetro e usá-lo para enviar essa string como SMS.

sendSMS(string1);

Esta é a função sendSMS () (sem parâmetros):

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

Minhas perguntas são:

  1. Como coloco o parâmetro de entrada da string no sendSMS?
  2. Também preciso usar um protótipo de função para sendSMS ()? (para que apareça três vezes, 1 no protótipo, 1 na declaração e uma na chamada). Ou não preciso usar o protótipo de função antes do loop principal ()?
user1584421
fonte

Respostas:

10
  1. Apenas mude

    void sendSMS()

    para

    void sendSMS(const String& thisIsAString)

    Você pode acessar o parâmetro dentro da função com thisIsAString.

  2. Não, você não precisa de um protótipo.

O cara com o chapéu
fonte
8
Eu preferiria aconselhar passar a String por referência, para evitar que código adicional seja executado por nada (copy-constructor, destructor): void sendSMS(String& thisIsAString)ou melhor ainda, uma referência const, se o argumento da string não for modificado pela função:void sendSMS(const String& thisIsAString)
jfpoilpret
2

Eu diria para nunca usar String novamente. Quando o código aumentar e o uso de memória for crítico, você chegará a um beco sem saída. Eu sei que é mais conveniente, mas experimente arrays de char. Algo como:

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

Mudei a função para bool. Isso significa que você pode usá-lo dentro de uma instrução if, onde deseja que ela seja concluída antes de continuar com o seu código.

Você precisará alocar memória para a matriz; declare assim:

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

Aqui, aloco 32 bytes para dados e um byte adicional para o caractere que significa "fim da string" (é esse \ 0).

dBm
fonte
0

Você pode mudar

void sendSMS()

para

void sendSMS(String myinputstring)

você pode usar myinputstring no seu código.

pythosanck
fonte
Isso é apenas uma repetição da outra resposta.
Sempaiscuba # 21/18