Скажите пожалуйста , где я торможу…
код должен считать данные из еепром и отсортировать их.
из епром данные читаются , а вот после сортировки результата 0.
#include <EEPROM.h>
#include <stdlib.h>
#include <string.h>
char fd[20];
void setup() {
Serial.begin(19200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Read float from EEPROM: ");
WriteEEP(); //заполнить еепром для проверки
MySort(); // попытка отсортировать
}
void loop() {
/* Empty loop */
}
void MySort(void) {
int z, zz;
char *MyStr[30]; // массив указателей на строки для сортировки
zz = 0;
for (z = 20; z < 160; z += 20) {
EEPROM.get(z, fd);
Serial.println(fd); // строки считаные из еепром
// if (strlen(fd) != 0) { // если строка пустая игнорируем
*MyStr[zz] = fd; // а вот тут видимо болт
zz++;
// }
}
int SiZe = sizeof(MyStr) / sizeof(char *);
qsort(MyStr, SiZe, sizeof(char *), MyCmp);
for (z = 0; z < zz; z++) {
Serial.println(MyStr[z]);
}
}
int MyCmp(const void *p1, const void *p2)
{
const char *s1 = *(const char **)p1;
const char *s2 = *(const char **)p2;
return strcmp(s1, s2);
}
void WriteEEP(void) {
char mem[20];
const String ff = " ";
String f0 = "A.CURRENT";
String f5 = "Akai";
String f2 = "Costa";
String f3 = "India";
String f4 = "Traton";
String f1 = "Old";
ff.toCharArray(mem, 18); // очищенная строка
f0.toCharArray(mem, 18); //строка со значением определенной длины 20 символов
mem[19] = 0; // 20 символ - код строки от (0-150)
EEPROM.put(20, mem);
ff.toCharArray(mem, 18);
f1.toCharArray(mem, 18);
mem[19] = 5;
EEPROM.put(40, mem);
ff.toCharArray(mem, 18);
f2.toCharArray(mem, 18);
mem[19] = 2;
EEPROM.put(60, mem);
ff.toCharArray(mem, 18);
f3.toCharArray(mem, 18);
mem[19] = 4;
EEPROM.put(80, mem);
ff.toCharArray(mem, 18);
f4.toCharArray(mem, 18);
mem[19] = 3;
EEPROM.put(100, mem);
ff.toCharArray(mem, 18);
f5.toCharArray(mem, 18);
mem[19] = 1;
EEPROM.put(120, mem);
}
судя по всему проблема в 29 строке , но не могу понять , что ей не нравится.
потому , как даже комментируя сортировку - по указателям массива ничего нет(мусор)
спасибо
Может воспользоваться встроенной системной функцией сортировки и не городить огород? Тем более, если не умеете? Есть же готовая функция qsort, которая всё отсортирует в лучшем виде.
Для того, чтобы понять, что он хочет, а чего нет, достаточно объяснить себе пошагово, что происходит в данном случае: char *MyStr[3]={"привет","аллоя","енот");
почему одним и тем,же , разве при добавлении новой строки , она не добавит в массив новый указатель на новую строку? (у меня пока с указателями туговато идет)
но я так понял , что 3 моих строки размещены в памяти а 3 указателя на адреса строк размещены в самом массиве. Тоже самое я пытаюсь сделать в 29 строке. добавляю строку в память и новый указатель записывается в массив.Индекс новый значит и указатель на новое место записан…
конечно, в этом и смысл… иначе как потом сортировать …только вот не строки в массив строки в память помещаются а я в массив пихаю указатели на эти строки, чтобы потом использовать qsort