Компилятор ругается (warning) на функцию из старой библиотеки. В исходном виде примерно так (несущественную часть опустил): Код (C++): char* anyFunction() { char buffer[255]; . . . return buffer; } Ругается так: Попробовал три варианта исправления (все рабочие, без ругани): Код (C++): char* anyFunction() { // // Вариант 1: // static char buffer[255]; // // Вариант 2: // char *buffer = new char[255]; // // Вариант 3: // char buff[255]; // char *buffer = buff; // . . . return buffer; } Какой из этих вариантов лучше, в плане предотвращения утечки памяти?
Функция преводит DateTime в строку по шаблону. Спойлер: Исходный код функции Код (C++): char* DS3231::dateFormat(const char* dateFormat, RTCAlarmTime dt) { char buffer[255]; buffer[0] = 0; char helper[11]; while (*dateFormat != '\0') { switch (dateFormat[0]) { // Day decoder case 'd': sprintf(helper, "%02d", dt.day); strcat(buffer, (const char *)helper); break; case 'j': sprintf(helper, "%d", dt.day); strcat(buffer, (const char *)helper); break; case 'l': strcat(buffer, (const char *)strDayOfWeek(dt.day)); break; case 'D': strncat(buffer, strDayOfWeek(dt.day), 3); break; case 'N': sprintf(helper, "%d", dt.day); strcat(buffer, (const char *)helper); break; case 'w': sprintf(helper, "%d", (dt.day + 7) % 7); strcat(buffer, (const char *)helper); break; case 'S': strcat(buffer, (const char *)strDaySufix(dt.day)); break; // Hour decoder case 'H': sprintf(helper, "%02d", dt.hour); strcat(buffer, (const char *)helper); break; case 'G': sprintf(helper, "%d", dt.hour); strcat(buffer, (const char *)helper); break; case 'h': sprintf(helper, "%02d", hour12(dt.hour)); strcat(buffer, (const char *)helper); break; case 'g': sprintf(helper, "%d", hour12(dt.hour)); strcat(buffer, (const char *)helper); break; case 'A': strcat(buffer, (const char *)strAmPm(dt.hour, true)); break; case 'a': strcat(buffer, (const char *)strAmPm(dt.hour, false)); break; // Minute decoder case 'i': sprintf(helper, "%02d", dt.minute); strcat(buffer, (const char *)helper); break; // Second decoder case 's': sprintf(helper, "%02d", dt.second); strcat(buffer, (const char *)helper); break; default: strncat(buffer, dateFormat, 1); break; } dateFormat++; } return buffer; }
b707 Понял, принял. DetSimen К сожалению, в библиотеки определена своя структура RTCDateTime. Он не подойдет для предложенной функции (разное кол-во полей и их размерность). Всем, спасибо! Вопрос исчерпан.
любая нормальная библиотека умеет переводить свой формат времени в стандартный, описанный в time.h Если твоя биб-ка этого не умеет, брось каку, найди нормальную.
Светодиодом "ON" управлять нельзя, он просто светится при наличии питания. Управлять можно светодиодом "L", он подключен к 13 пину. Можите сами посмотреть схему платы, их полно в сети.