Монитор порта не отображает структуру из массивов char
- Войдите на сайт для отправки комментариев
Втр, 18/02/2020 - 21:43
Здравствуйте, уважаемые форумчане. Изучаю структуру. Не могу понять почему она не выводится в монитор порта (выводит кракозябру).
Использую Arduino Mega2560
Вот код
struct data
{
char a1[9];
char a2[7];
char a3[10];
char a4[3];
};
data d;
void setup()
{
Serial.begin(115200);
}
void loop()
{
displayInfo();
}
void displayInfo()
{
d.a1[9] = 12354323;
d.a2[7] = 453235;
d.a3[10] = 5643.2312;
d.a4[3] = "AA";
for (int i = 0; i < sizeof(d); i++)
{
Serial.write(*((char*)&d+i));
}
printdata(&d);
Serial.println();
}
void printdata(const void * v) {
const data * d = (const data *) v;
Serial.print(d->a1[9]);
Serial.print(";");
Serial.print(d->a2[7]);
Serial.print(";");
Serial.print(d->a3[10]);
Serial.print(";");
Serial.print(d->a4[3]);
}
Монитор порта

ничего из этого не является типом char
А как правильнее тогда написать?
А как правильнее тогда написать?
Ну например
А как правильнее тогда написать?
элементы массива не копируются при присваивании массивов, чтобы присвоить массиву char значение "Hello!" после инициализации- нужно последовательно присвоить каждую букву строки каждому элементу массива:
но вообще, конечно, так никто не делает. Массивы либо инициализируются строкой сразу :
либо заполняются копированием при помощи функций библиотеки string
Спасибо, попробую
Получается нужно разбить каждый массив на отдельные элементы, присвоить значение а потом снова вместе собрать?
Получается нужно разбить каждый массив на отдельные элементы, присвоить значение а потом снова вместе собрать?
ПС: http://cppstudio.com/post/690/
Спасибо, изучу
Изменил я код программы, вроде получилось, но вылезло кое что другое (выводится два раза)
struct data { char a1[9]; char a2[7]; char a3[10]; char a4[3]; }; data d; void setup() { Serial.begin(9600); } void loop() { displayInfo(); } void displayInfo() { char a1[]= "12354323"; strncpy(d.a1, a1, 9); d.a1[9] = '\n'; char a2[]= "453235"; strncpy(d.a2, a2, 7); d.a2[7] = '\n'; char a3[]= "5643.2312"; strncpy(d.a3, a3, 10); d.a3[10] = '\n'; char a4[]= "AA"; strncpy(d.a4, a4, 3); d.a4[3] = '\n'; for (int i = 0; i < sizeof(d); i++) { Serial.write(*((char*)&d+i)); } printdata(&d); Serial.println(); } void printdata(const void * v) { const data * d = (const data *) v; Serial.print(d->a1); Serial.print(";"); Serial.print(d->a2); Serial.print(";"); Serial.print(d->a3); Serial.print(";"); Serial.print(d->a4); }Tima123, книгу не читаем по регилиозным причинам. Мол нормальные русские пасаны засмеют и обзавут ботаном. Намекну все же почитайте про массивы, объявление и адрес последней ячейки
Пробовал разные варианты, в том числе и вместо strncpy использовал strcpy. Выводит тоже самое
Может перечитать программу и посмотреть, нет ли в ней случайно второго вывода?
Точно))). Огромное спасибо что заметили и подсказали.
Удалил это кусочек и все нормально.
for (int i = 0; i < sizeof(d); i++) { Serial.write(*((char*)&d+i)); }Всем спасибо за помощь)