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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Помогите разобраться с переполнением массива

Непрочитано 28.03.2014, 19:45  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Помогите разобраться с переполнением массива

Добрый день.
Есть 1 массив символов lcdbuffer1 для вывода ни дисплей

Если написать так:
unsigned char lcdbuffer1[16];
strcopy(lcdbuffer1,"__:__:_______.__",16,0); //функция см. ниже
lcd_gotoxy(0,0);
lcd_puts(lcdbuffer1);

то на дисплее появляется крокозябра во второй строке
Если же написать перемнной изначальной изначально задать значение, то все работает нормально:
unsigned char lcdbuffer1[16]={'_','_',':','_','_',':','_','_','_','_','_','_', '_','.','_','_'};

Вот сама функция для сложения строк:
void strcopy(char *str, char *str1, char l, char k)
{
char n;
for(n=0;n‹l;n++)str[n+k]=str1[n];
}
Функция вставляет "k" символов второй строки в первую, начиная с "l" символа первой строки.

Т.е. проблема где то в этой функцие(весь остальной код в проекте заремарен для проверки). Так же определил что если увеличить размер массива до 20, то тоже работает как надо.
Подскажите, что не так в этой функцие, почему она вызывает переполнение?
Реклама:

Последний раз редактировалось Sany81; 28.03.2014 в 20:36.
Sany81 вне форума  
Непрочитано 28.03.2014, 20:27  
Ara41
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

При Вашем вызове функции параметр цикла n изменяется от 0 до 15. Какое значение будет, например, в str1[10] ?
Ara41 вне форума  
Непрочитано 28.03.2014, 20:35  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

Сообщение от Ara41 Посмотреть сообщение
При Вашем вызове функции параметр цикла n изменяется от 0 до 15. Какое значение будет, например, в str1[10] ?
Прошу прощения, в первом сообщении пробелы исчезли, сейчас его подкорректирую.
Sany81 вне форума  
Непрочитано 28.03.2014, 21:04  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

В конце строки должен стоять 0. Иначе как lcd_puts(buffer) узнает, сколько символов выводить? Вот она и шарашит кракозябры во второй строке после нормального текста, пока не встретит ноль ...
Yurkin2014 вне форума  
Непрочитано 28.03.2014, 21:13  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

Я правильно понял что длинна массива должна быть 17 и 17й символ должен всегда быть 0??
Sany81 вне форума  
Непрочитано 28.03.2014, 21:17  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

Пустая строка содержит один байт - 0х00, это признак конца строки.
Длина строки в байтах - количество символов + 1.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 28.03.2014, 21:23  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

Сообщение от Sany81 Посмотреть сообщение
длинна массива должна быть 17
Да, должна быть на 1 больше чем максимальная длина строки.
И Ваша функция будет
Код:
void strcopy(char *str, char *str1, char l, char k)
{
char n;
for(n=0;n‹l;n++)str[n+k]=str1[n];
str[n+k]=0;
}
автоматически вставлять 0 в конце новой строки
Yurkin2014 вне форума  
Непрочитано 05.04.2014, 09:19  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: Помогите разобраться с переполнением массива

Всем спасибо.
Не было возможности поблагодарить.
В своей программе исправил 3 ошибки, первая была связана с длинной массива для вывода на дисплей, т.е. не хватало завершающего нулевого символа.
Остальные 2 связаны с корявыми функциями с указателями на массивы, переделал их без использования указателей и все ошибки прошли.
Sany81 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немецкая схемотехника. Помогите разобраться Luzkov TTL и CMOS логика 23 05.01.2011 11:13
[Решено] Помогите разобраться barbuss Proteus 2 26.10.2010 23:45
Помогите разобраться ,АЦП Тину 13, что то не так... Botan Микроконтроллеры, АЦП, память и т.д 2 14.09.2010 18:31
Помогите разобраться с транзисторами в Proteus`е EsterniTY Proteus 2 05.08.2004 00:18


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.