문자열 매개 변수가있는 함수


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 개, 호출에 1 개)이 3 번 나타납니다. 아니면 메인 루프 () 전에 함수 프로토 타입을 사용할 필요가 없습니까?

답변:


10
  1. 그냥 변경

    void sendSMS()

    void sendSMS(const String& thisIsAString)

    그런 다음을 사용하여 함수 내부의 매개 변수에 액세스 할 수 있습니다 thisIsAString.

  2. 아니요, 프로토 타입이 필요하지 않습니다.


8
void sendSMS(String& thisIsAString)문자열 인수가 함수에 의해 수정되지 않는 경우 아무것도 (복사 생성자, 소멸자) 실행되는 추가 코드를 피하기 위해 참조로 문자열을 전달하는 것이 좋습니다.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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.