Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 18.12.2012, 16:14  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Запутался в указателях

Добрый!
AVR, avrstudio, c#, FatFS lib, sdmmc.

Есть функция:
Код:
//////////////////////////////////////////////////////////////////////////
// get date and time
char *get_datetime(){
	char datetime[15];
	sprintf(datetime, "%06lu:%06lu›", gnss_data[0].ndate,gnss_data[0].utc_time_h);
	return datetime;
}
Первое использование:
Код:
RS485_send_str(get_datetime());RS485_send_str("\r\n");
выводит правильно. При попытке записать в sd
Код:
		f_lseek(&fil_obj,fil_obj.fsize);
		f_write(&fil_obj,get_datetime(),14,&ByteWrite);
		f_err_code = f_write(&fil_obj,_v,strlen(_v),&ByteWrite);
пишет



чего я недопонимаю?
Реклама:
whoim вне форума  
Непрочитано 18.12.2012, 16:15  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: запутался в указателях)

Должно быть так (как и выводится в терминал)
whoim вне форума  
Непрочитано 18.12.2012, 16:29  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: запутался в указателях)

Сообщение от whoim Посмотреть сообщение
char *get_datetime(){
char datetime[15];
sprintf(datetime, "%06lu:%06lu›", gnss_data[0].ndate,gnss_data[0].utc_time_h);
return datetime;
}
Вы возвращаете указатель datatime на нечто заведеное в стеке; А стек - это СТЕК; Кто Вам гарантирует сохранность этих 15 байт?
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
whoim (18.12.2012)
Непрочитано 18.12.2012, 16:32  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: запутался в указателях)

Да, мусолил это в голове..
Но тем не менее при использовании вывода в терминал все ОК. Там до \0 цикл шлет побайтно, все ок.

Разве что сам fwrite портит данные, но неверится..
эээ
счас, мысль
whoim вне форума  
Непрочитано 18.12.2012, 16:45  
Красный Свин
Частый гость
 
Регистрация: 12.10.2010
Сообщений: 27
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
Красный Свин на пути к лучшему
По умолчанию Re: запутался в указателях)

Сообщение от whoim Посмотреть сообщение
Да, мусолил это в голове..
Но тем не менее при использовании вывода в терминал все ОК. Там до \0 цикл шлет побайтно, все ок.
Разве что сам fwrite портит данные, но неверится..
эээ счас, мысль
Возвращение указателя или ссылки на временный объект на стеке функции - это undefined behavior. Оно может включать всебя все, в том чисте и нормальное функционирование.
Обсуждению не подлежит.
Красный Свин вне форума  
Сказали "Спасибо" Красный Свин
whoim (18.12.2012)
Непрочитано 18.12.2012, 17:13  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: запутался в указателях)

я понял, согласен, переделаю
whoim вне форума  
Непрочитано 18.12.2012, 17:29  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: запутался в указателях)

ну так и есть, отказался от памяти/указателей в пользу классики.. все работает
whoim вне форума  
Непрочитано 18.12.2012, 18:38  
Красный Свин
Частый гость
 
Регистрация: 12.10.2010
Сообщений: 27
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
Красный Свин на пути к лучшему
По умолчанию Re: запутался в указателях)

Сообщение от whoim Посмотреть сообщение
ну так и есть, отказался от памяти/указателей в пользу классики.. все работает
В смысле ? Указатели в с и есть классика Только пользоваться ими надо аккуратно..

- классический C подход:
void PrintDateTime(char* aBuf)
{
sprintf(aBuf, "....");
}

- правильно-параноидальный C подход:
void PrintDateTime(char* aBuf, int aBufLen)
{
snprintf(aBuf, aBufLen, ".....")
}
Красный Свин вне форума  
Непрочитано 18.12.2012, 22:09  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: запутался в указателях)

Что такое классический подход?

А типа char *Text = ( char* ) AllocMem( Size ) ? Это что?
Boba_spb вне форума  
Непрочитано 18.12.2012, 22:16  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: запутался в указателях)

Сообщение от Красный Свин Посмотреть сообщение
- классический C подход:
void PrintDateTime(char* aBuf)
Вот где б глянуть такой классический void Print(.... )
Boba_spb вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DS1307 запутался SerGO_83 Микроконтроллеры, АЦП, память и т.д 11 12.09.2012 10:54
Запутался в даташитах KOL151 Микроконтроллеры, АЦП, память и т.д 23 15.06.2011 11:44
С арифмметика. Запутался приведениях типов AndryG Микроконтроллеры, АЦП, память и т.д 3 10.12.2009 21:56
Программаторы... Запутался совсем. Elya Микроконтроллеры, АЦП, память и т.д 46 09.10.2009 09:00


Часовой пояс GMT +4, время: 07:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot