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:
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

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

Сообщение Сергей » 20 июл 2009, 15:12

А чем не устроит простой буффер? Сделай буффер на 64 символа, записывай туда и ноль в конце..
malloc очень замедляет работу МК
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение blindman » 20 июл 2009, 15:21

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

В общем и целом, есть мнение, что динамическое выделение памяти в встраиваемых системах - зло
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Сергей » 20 июл 2009, 15:26

не зло если есть специальный контроллер памяти. Но для таких маленьких контроллеров - нет смысла работать с динамической памятью, тк ее там очень мало и фрагментация может сильно сказаться. Советую забыть о malloc для МК ниже ARM9.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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 не начал пользовать).
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

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

Сообщение Сергей » 20 июл 2009, 16:06

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

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

sprintf( buffer, "My const char string" );
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение executer » 20 июл 2009, 17:06

Благодарю. Вечером попробую, и что такое memset почитаю )
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

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

Сообщение executer » 21 июл 2009, 00:10

ну вот, таже проблема что и на ПК была - выводит на экранчик всякий мусор (
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

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е, в данном случае, имеет входные параметры: указатель на буффер и количество
  // символов для записи
 
  ...
}
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение executer » 21 июл 2009, 00:46

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

Дико извиняюсь. :oops:
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron