Передача значения переменной в объект структуры

в этом коде я хочу передать значение массива переменных символов «pass» в объект «MyObject». Но я получаю эту ошибку.

    Arduino: 1.6.11 (Windows 8.1), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\XXX\Desktop\EEPROM_put\EEPROM_put.ino: In function 'void setup()':

EEPROM_put:17: error: array must be initialized with a brace-enclosed initializer

};

^

exit status 1
array must be initialized with a brace-enclosed initializer

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

когда я меняю pass на *pass, результат EEPROM.get() равен 1 и 6 вместо 1, 62345, 7539514682.

#include <EEPROM.h>
struct MyObject {
boolean stat;
char password[6];
char mobile[11];
}; 

char pass[6]="62345";
void setup() {
Serial.begin(9600);
while (!Serial);
MyObject customVar = {
  1,
  pass,
  "7539514682"
 };
EEPROM.put(1, customVar);
Serial.print("Written custom data type!");
}

void loop() {

}

, 👍1


2 ответа


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

2

Используйте класс и конструктор

#include <EEPROM.h>
class MyObject {
    boolean stat;
    char password[6];
    char mobile[11];
  public:
    MyObject(bool tempStat, char tempPassword[], char tempMobile[])
    {
      stat = tempStat;
      strcpy(password, tempPassword);//Как предложил mikael
      strcpy(mobile, tempMobile);
    }
};

char pass[6] = "62345";
void setup() {
  Serial.begin(9600);
  while (!Serial);
  MyObject customVar(true, pass, "7539514682");
  EEPROM.put(1, customVar);
  Serial.print("Written custom data type!");
}
,

получаем вывод вроде этого: Чтение пользовательского объекта из EEPROM: 1 62345 7539514682Т 7539514682Т, @Tanmay Yerunkar

Каков ожидаемый результат?, @Sniper

Стоит ли копировать с sizeof(password) и не останавливаться на нуле? strcpy() может быть проще., @Mikael Patel

Извините, забыл NULL-терминальный символ. Внесены изменения, @Sniper

@Sniper по-прежнему не получает правильный вывод, теперь получает какие-то случайные символы, вывод такой: 1 62г! 75 75 Ожидаемый результат: 1, 62345, 7539514682, @Tanmay Yerunkar

Сработала ли strcpy?, @Sniper


0

Хотя метод из ответа Снайпера работает, он включает в себя копирование данных, чего часто хочется избежать на Arduino. Самым простым решением вашей проблемы, вероятно, будет инициализация вашего пароля поле с текстовой строкой, как вы это делали с полем mobile:

MyObject customVar = {
    1,
    "62345",
    "7539514682"
};

или, может быть, если вы хотите, чтобы пароль был написан в верхней части программа,

#define PASS "62345"

MyObject customVar = {
    1,
    PASS,
    "7539514682"
};

Другой вариант — не хранить строки в объекте. Вместо этого хранить их в другом месте и пусть объект хранит только указатели на них:

struct MyObject {
    boolean stat;
    const char *password;
    const char *mobile;
};

char pass[6] = "62345";

[...]

MyObject customVar = {
    1,
    pass,
    "7539514682"
};

Обратите внимание, что в этом случае номер мобильного телефона сохраняется компилятором как неименованная строковая константа. Поскольку она константа, поле mobile был введен как const char *. Я ввел поле password то же самое для симметрии, но в этом случае он не обязательно должен быть const.

,