roboforum.ru

Технический форум по робототехнике.

Выделение памяти под string переменную через malloc

Выделение памяти под string переменную через malloc

executer » 20 июл 2009, 14:58

Вот вырезка из кода, при компиляции четырехэтажно ругается на строку с malloc:
Код: Выделить всёРазвернуть
char *EditText;
EditText=malloc(30);

sprintf(EditText,"Бла-бла-бла");

Может еще както можно? Если да, то хотелось бы всетаки и malloc научится пользовать.
Какие еще варианты для создания стринговой переменной?
В скриптах для ПК использовал следующее:
Код: Выделить всёРазвернуть
char *temp;
temp=malloc(15);
sprintf(temp,"Station%i",num);

Думал и тут прокатит. :pardon:

Re: Выделение памяти под string переменную через malloc

Сергей » 20 июл 2009, 15:12

А чем не устроит простой буффер? Сделай буффер на 64 символа, записывай туда и ноль в конце..
malloc очень замедляет работу МК

Re: Выделение памяти под string переменную через malloc

blindman » 20 июл 2009, 15:21

Какой контроллер? Компилятор?

В общем и целом, есть мнение, что динамическое выделение памяти в встраиваемых системах - зло

Re: Выделение памяти под string переменную через malloc

Сергей » 20 июл 2009, 15:26

не зло если есть специальный контроллер памяти. Но для таких маленьких контроллеров - нет смысла работать с динамической памятью, тк ее там очень мало и фрагментация может сильно сказаться. Советую забыть о malloc для МК ниже ARM9.

Re: Выделение памяти под string переменную через malloc

executer » 20 июл 2009, 15:30

Понятно, думал что так праильнее... Контроллер Мега32. Компилятор Вин... чивото там.

2Сергей. Т.е. следующим образом?
Код: Выделить всёРазвернуть
char EditText[]={0,0,0,0,0,0,0,0,0,0,0,0....};

sprintf(EditText,"Бла-бла-бла");

Такая конструкция должна работать?
(Помнится мучался так на ПК пока malloc не начал пользовать).

Re: Выделение памяти под string переменную через malloc

Сергей » 20 июл 2009, 16:06

Код: Выделить всёРазвернуть
char buffer[64];

memset( buffer, 0, sizeof( buffer ) );

sprintf( buffer, "My const char string" );

Re: Выделение памяти под string переменную через malloc

executer » 20 июл 2009, 17:06

Благодарю. Вечером попробую, и что такое memset почитаю )

Re: Выделение памяти под string переменную через malloc

executer » 21 июл 2009, 00:10

ну вот, таже проблема что и на ПК была - выводит на экранчик всякий мусор (

Re: Выделение памяти под string переменную через malloc

Сергей » 21 июл 2009, 00:27

Вот тебе пример
Код: Выделить всёРазвернуть
#include <stdio.h>

int main ()
{
  char buffer[128]; // задаем размер буффера

  memset( buffer, 0, sizeof( buffer ) ); // обнуляем весь массив, чтобы там не было мусора. На всякий.

  int n = 0; // всегда нужно инициализировать переменные
  int a = 5;
  int b = 3;
 
  ...

  n = sprintf( buffer, "%d plus %d is %d", a, b, a+b ); // n - это количество символов в получившейся строке

  uart_write( buffer, n ); // выводим в uart n символов из buffer
  // где метод uart_writе, в данном случае, имеет входные параметры: указатель на буффер и количество
  // символов для записи
 
  ...
}

Re: Выделение памяти под string переменную через malloc

executer » 21 июл 2009, 00:46

Вот блин. Оказуется все работало. И malloc и memset - я функции что на экранчик печатает забыл указать что строка в ОЗУ а не в ПЗУ находится.
(библиотечка glcd)

Дико извиняюсь. :oops:


Rambler\'s Top100 Mail.ru counter