Объявление 'varDay' как ошибка массива ссылок

Я пытаюсь написать функцию для хранения данных о дате и времени из модуля RTC. Я использовал массивы символов для реализации функции. Я получаю "декларацию 'varDay' как массив ссылок" ошибка при компиляции.

Я все еще изучаю массивы символов и манипулирую ими, поэтому, возможно, я совершаю очень очевидную ошибку. Не могли бы вы объяснить, что я делаю неправильно?

#include <RTClib.h>

RTC_DS3231 rtc;

void setup() {
  Serial.begin(115200);
#ifndef ESP8266
  while (!Serial); // ждем подключения последовательного порта. Нужен для родного USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // Когда необходимо установить время на новом устройстве или после сбоя питания,
    // следующая строка устанавливает RTC на дату & время составления этого скетча
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

}

void loop() {
  unsigned long newTime = millis();
  static unsigned long oldTime = 0;

  char varYear [] = "1234";
  char varMonth [] = "00";
  char varDay [] = "00";
  char varHour [] = "00";
  char varMinute [] = "00";
  char varSecond [] = "00";
  unsigned int varEpoch;
  char varDate [] = "123456789";
  char varTime [] = "12345678";
  char dash [] = "-";
  char colon [] = ":";


  if (newTime - oldTime >= 60000) {
    oldTime = newTime;

    getDate(varDay, varMonth, varYear, varDate, dash, colon);
  }

}
void getDate (char &varDay[3], char &varMonth[3], char &varYear[5], char &varDate[11], char &dash[2], char &colon[2]) {

  DateTime now = rtc.now();
  strcpy (varDay, now.day());
  strcpy (varMonth, now.month());
  strcpy (varYear, now.year());

  strcat (varDate, varDay) ;
  strcat (varDate, dash);
  strcat (varDate, varMonth);
  strcat (varDate, dash);
  strcat (varDate, varYear)

  Serial.println(varDate);
}

, 👍0


1 ответ


Лучший ответ:

1

char &varDay[3] — это массив из 3 ссылок на тип char, а не ссылка на тип char размера 3.

Вместо этого просто передайте указатель:

void getDate (char *varDay, char *varMonth, char *varYear, char *varDate, char *dash[2], char *colon[2]) {

Также:

strcpy (varDay, now.day());
strcpy (varMonth, now.month());
strcpy (varYear, now.year());

Это не сработает. Вы не можете скопировать число в строку. now.day() и т. д. необходимо сначала преобразовать в строку.

Было бы лучше отформатировать вашу строку с помощью snprintf:

snprintf(varDate, 11, "%02d-%02d-%04d", now.day(), now.month(), now.year());
,

Большое спасибо. Я прочитал ваш пост «Зло строк Arduino», поэтому пытался реализовать это без использования класса String. Итак, это была моя первая попытка работы с массивами символов. Я не знал о функции snprintf, поэтому узнал кое-что новое :) хотя еще многое предстоит узнать, @Zaffresky