Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вс дек 06, 2020 04:56:46

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6939 ]  1, , , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 04, 2010 12:50:00 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
есть прога (мое извращение)

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>

using namespace std;

//function IntToHex ( DecimalValue : Integer; MinimumWidth : Integer ) : string;
char* IntToHex(long DecimalValue, int MinimumWidth)
{
char b[256];
sprintf(b, "%lX", DecimalValue);
b[3] = '\0';
return b;
}

int main()
{
long dv = 20;
int mw = 2;

cout << IntToHex(dv,mw) << endl;
return 0;
}
т.е. в момент когда я возвращаю строку, то ее в памяти уже нет и она может быть занята другой переменной.. так?
не смотрите на то что она в принципе делает не совсем то что и делфи аналог. очень прошу показать правильную реализацию возвращения строки на примере моей функции.

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 13:41:08 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
объяви b как static
Код:
static char b[256];

ну или сделай ее глобальной.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 14:41:52 
Нашел транзистор. Понюхал.

Карма: 12
Рейтинг сообщений: 32
Зарегистрирован: Пн авг 31, 2009 20:36:43
Сообщений: 162
Рейтинг сообщения: 0
ИМХО правильней было бы объявить b в main, а в IntToHex передавать указатель.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Шестое юбилейное мероприятие в процессе
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 15:01:41 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пт авг 10, 2007 12:49:55
Сообщений: 3022
Откуда: kr.ua
Рейтинг сообщения: 0
Кислый писал(а):
очень прошу показать правильную реализацию возвращения строки на примере моей функции.


3 варианта:
1) static буффер в памяти
2) malloc (и аналогичные по назначению ф-и), с освобождением после обработки результата
3) передача указателя на буффер в 1 из параметров

все 3 варианта успешно применяются... хотя каждый имеет свои плюсы и минусы.


Вернуться наверх
 
Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 16:40:26 
Опытный кот

Зарегистрирован: Чт фев 18, 2010 13:51:56
Сообщений: 877
Рейтинг сообщения: 0
Насколько я вижу, здесь используется C++. Тогда можно задействовать стандартный C++ класс std::string:
Код:
#include <string>

std::string IntToHex(long DecimalValue, int MinimumWidth)
{
   char b[256];
   sprintf(b, "%lX", DecimalValue);
   b[3] = '\0';
   return b;
}

int main()
{
   cout << IntToHex(20,2) << endl;
   return 0;
}


Вернуться наверх
 
SiC MOSFET = высокий КПД источника питания

650 В карбид-кремниевые (SiC) MOSFET компании Wolfspeed имеют самый низкий в отрасли показатель сопротивления открытого канала и наименьшую его зависимость от температуры, что дает им преимущество не только перед обычными кремниевыми (Si) 650 В MOSFET, но и перед нитрид-галлиевыми транзисторами.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 18:16:11 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
еще можно \0 не писать. он должен быть в sprintf. еще можно воспользоваться строковыми потоками.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 19:26:21 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
я себе задачу поставил пользоваться с++ только по невозможности использовать с. Как говорится "То что сложно - не нужно, нужно то что просто"

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Чт ноя 04, 2010 19:37:51 
Опытный кот

Зарегистрирован: Чт фев 18, 2010 13:51:56
Сообщений: 877
Рейтинг сообщения: 0
Тогда для начала убери
Кислый писал(а):
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>

и
Кислый писал(а):
cout << IntToHex(dv,mw) << endl;

поскольку это тоже C++.

Ну а способы на C NiTr0 уже привёл.
Обычно в таком случае используют вариант с буфером в вызывающей функции:
Код:
#include <stdio.h>

void IntToHex(char *b,long DecimalValue, int MinimumWidth)
{
   sprintf(b, "%lX", DecimalValue);
   b[3] = '\0';
   return b;
}

int main()
{
   long dv = 20;
   int mw = 2;
   char b[256];
   IntToHex(b,dv,mw);
   printf("%s",b);
   return 0;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Вс ноя 07, 2010 22:25:15 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
господа, буффер это хорошо.. но эффект тот же что и от "static".
просто что ж получается.. допустим у меня цикл.. с неопределенным количеством повторов.. как тогда ? ведь не могу же я определить заранее сколько будет у меня буферов ????

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Вс ноя 07, 2010 23:22:42 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пт авг 10, 2007 12:49:55
Сообщений: 3022
Откуда: kr.ua
Рейтинг сообщения: 0
Кислый писал(а):
господа, буффер это хорошо.. но эффект тот же что и от "static".
просто что ж получается.. допустим у меня цикл.. с неопределенным количеством повторов.. как тогда ? ведь не могу же я определить заранее сколько будет у меня буферов ????

А в чем проблема?
Кто допустим мешает создать массив указателей на буфферы, и по мере необходимости - выделять новый? Или, если не нравится - двухсвязный список буфферов реализовать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Вс ноя 07, 2010 23:29:07 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
как-то не эстетично ))

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 08:42:16 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Кислый писал(а):
как-то не эстетично ))


иначе никак.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 10:12:37 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
тогда поделитесь мы слями теоретического характера.

имеем код, работающий с int, применена так называемая передача аргумента по ссылке.
Код:
int fn(int &pnArg)
{   pnArg = 10; return pnArg;  }

int main()
{
    int n = 1;
    cout << f(n) << endl;
    return 0;
}


тот же код но int заменен на char:
Код:
char fn(char &pnArg)
{   pnArg = 'A'; return pnArg;  }

int main()
{
    char n = '2';
    cout << f(n) << endl;
    return 0;
}


работает.
но
Код:
char fn(char &pnArg[])
{   pnArg[2] = 'A'; return pnArg;  }

int main()
{
    char n[4] = "012";
    cout << f(n) << endl;
    return 0;
}
уже не работает. почему ?

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 10:40:12 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
трындец. у меня дофига функций которые должны возвращать символьную строку, или указатель на строку.. у меня псих уже.

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 11:07:06 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
во-первых имена функций разные. во-вторых передавай указатель на строку
Код:
char *fun(char *arg)
{
   arg[2] = 'G';
   return arg;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 12:19:24 
Опытный кот

Зарегистрирован: Чт фев 18, 2010 13:51:56
Сообщений: 877
Рейтинг сообщения: 0
Кислый писал(а):
но
Код:
char fn(char &pnArg[])
{ pnArg[2] = 'A'; return pnArg; }

int main()
{
char n[4] = "012";
cout << f(n) << endl;
return 0;
}
уже не работает. почему ?

Забыл * в типе возвращаемого значения а так же имена функций разные в объявлении и вызове. И, кстати, ссылки - это тоже C++, а в C всё делается на указателях.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 17:45:19 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 1
блин. порой мне кажется что я тупица. ниче не понимаю.

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 18:05:26 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
просто мало опыта и практики


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Пн ноя 08, 2010 23:08:18 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2092
Откуда: Краснодар
Рейтинг сообщения: 0
NiTr0 писал(а):
Кто допустим мешает создать массив указателей на буфферы, и по мере необходимости - выделять новый? Или, если не нравится - двухсвязный список буфферов реализовать?


покажите пример, плз. а то сам не дойду :dont_know:

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите с поиском ответа ( C си)
СообщениеДобавлено: Вт ноя 09, 2010 00:14:37 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пт авг 10, 2007 12:49:55
Сообщений: 3022
Откуда: kr.ua
Рейтинг сообщения: 0
char* c[100];
int count=0;

for (i=........) {
c[count] = malloc(STRSIZE);
if (c[count]!=NULL) count++; else break;
func(c[count-1]);
}

while count>0; do {
free(c[--count]);
}


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6939 ]  1, , , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Asya K и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y