Строковая проблема форматирования Ардуино

Большинство людей не кодирует фактический GUI в Erlang. Более общий подход должен был бы записать уровень GUI в Java или C# и затем говорить с Вашим приложением Erlang через сокет или канал.

, Имея это в виду, Вы, вероятно, хотите изучить различные библиотеки для того, чтобы сделать RPC между Java или.Net приложениями и Erlang:

http://weblogs.asp.net/nleghari/archive/2008/01/08/integrating-net-and-erlang-using-otp-net.aspx

http://www.theserverside.com/tt/articles/article.tss?l=IntegratingJavaandErlang

РЕДАКТИРОВАНИЕ , Если Вы действительно установлены при кодировании интерфейса в erlang, Вы могли бы считать выполнение веб-GUI подаваемым через Отклонения от курса, erlang веб-сервер: http://yaws.hyber.org/appmods.yaws

8
задан amb9800 24 November 2009 в 00:46
поделиться

3 ответа

Синтаксис фигурных скобок действителен для первоначального объявления переменной, но не для присвоения постфактум.

Кроме того, вы возвращаете указатель на автоматическую переменную, которая после возврата больше не распределяется корректно (и будет уничтожена при следующем вызове, например, на print ). Вам нужно сделать что-то вроде этого:

void formatTimeDigits(char strOut[3], int num)
{
  strOut[0] = '0' + (num / 10);
  strOut[1] = '0' + (num % 10);
  strOut[2] = '\0';
}

void serialOutput12()
{
  char strOut[3]; // the allocation is in this stack frame, not formatTimeDigits

  printWeekday(weekday); // picks the right word to print for the weekday

  Serial.print(", "); // a comma after the weekday

  Serial.print(hour12, DEC); // the hour, sent to the screen in decimal format

  Serial.print(":"); // a colon between the hour and the minute

  formatTimeDigits(strOut, minute);
  Serial.print(strOut); // the minute

  Serial.print(":"); // a colon between the minute and the second

  formatTimeDigits(strOut, second);
  Serial.print(strOut); // the second
}
9
ответ дан 5 December 2019 в 17:38
поделиться

В C вы не можете напрямую установить содержимое массива с помощью оператора присваивания = (вы можете инициализировать массив, но это другое дело, даже если оно выглядит похожим).

Дополнительно:

  • Это не похоже на то, что функция / оператор Wiring char (value) делает то, что вы хотите; и
  • Если вы хотите вернуть указатель на этот массив strOut , вам нужно сделать его статическим сроком хранения.

Простой способ сделать то, что вы хотите, - sprintf :

char * formatTimeDigits (int num)
{
  static char strOut[3];

  if (num >= 0 && num < 100) {
    sprintf(strOut, "%02d", num);
  } else {
    strcpy(strOut, "XX");
  }

  return strOut;
}
1
ответ дан 5 December 2019 в 17:38
поделиться

Пара вещей:

  • Вы не можете назначить массиву: strOut = {'0', (char) num};
  • Вы возвращаете адрес объекта, который перестанет существовать сразу после оператора return.

Для первой проблемы присвойте элементам массива:

strOut[0] = '0';
strOut[1] = num;
strOut[2] = '\0';

] Для второй проблемы решение немного сложнее. Лучше всего передать строку назначения в функцию FormatTimeDigits () и позволить вызывающему абоненту беспокоиться об этом.

FormatTimeDigits(char *destination, int num); /* prototype */
FormatTimeDigits(char *destination, size_t size, int num); /* or another prototype */

Еще один момент по 1-му элементу: возможно, вы видели что-то похожее в ] инициализация . Это отличается от присваивания и позволяет использовать конструкцию, похожую на присваивание.

char strOut[] = {'a', 'b', 'c', '\0'}; /* ok, initialization */
strOut = {'a', 'b', 'c', '\0'}; /* wrong, cannot assign to array */
0
ответ дан 5 December 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: