Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Почему при использовании буферов (у меня их 4) в разных местах размером больше 256 (ставил 400) начинает рассыпаться sprintf - выводит глюки. В чем может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 (изменено) · Жалоба Есть какая специфика использования таких буферов? Изменено 16 ноября, 2022 пользователем haker_fox Флуд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба а буфер наверно объявлен как char с размером [0xff] и подаете вы туда utf8 :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба а буфер наверно объявлен как char с размером [0xff] и подаете вы туда utf8 :) Вовсе нет. Буфер char buf[400]; и подаю я туда байты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Есть какая специфика использования таких буферов? Никакой. Накладываются, наверно, буферы на стек - и привет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Чисто поржать - мне не до смеха. Есть какая специфика использования таких буферов? Вероятных причин может быть целая туча. А реальная вряд-ли связана со sprintf. Скорее баг у вас в другом месте. Например: каков размера стека задачи, вызывающей sprintf? PS: Не использую sprintf ни в одном из последних проектов.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Например: каков размера стека задачи, вызывающей sprintf? Как это узнать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Как это узнать? Традиционный способ такой: 1. Заполняем выделенную под стек память каким-нибудь паттерном (хоть бы и однобайтовым) 2. Вызываем интересующую процедуру 3. Смотрим, сколько памяти было "затерто" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Как это узнать? Это надо не узнавать. А задавать. У себя в исходниках. Если конечно писали их Вы.... 3. Смотрим, сколько памяти было "затерто" В некоторых случаях наблюдал как ..printf из IAR-овской библиотеки использовал до немного больше 256 байт стека. Но это не при каждом вызове. Обычно - намного меньше. Так что "просто вызвать и посмотреть сколько потрёт" - тут не всегда сработает как надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Традиционный способ такой: 1. Заполняем выделенную под стек память каким-нибудь паттерном (хоть бы и однобайтовым) 2. Вызываем интересующую процедуру 3. Смотрим, сколько памяти было "затерто" Слишком сложно. Даже если смогу, как изменить размер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба В некоторых случаях наблюдал как ..printf из IAR-овской библиотеки использовал до немного больше 256 байт стека. Но это не при каждом вызове. Обычно - намного меньше. Так что "просто вызвать и посмотреть сколько потрёт" - тут не всегда сработает как надо. Да форматированный ввод-вывод очень прожорлив. Смотреть, естественно, наиболее навороченные вызовы. Слишком сложно. Несколько строк кода. Даже если смогу, как изменить размер? Этот момент лучше выяснять задолго до введения нескольких буферов по 400 байт. Кстати, Буфер char buf[400]; и подаю я туда байты. buf - не локальный часом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба buf - не локальный часом? Локальный. А что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Буфер char buf[400]; и подаю я туда байты. buf - не локальный часом? Это надо уже заносить в faq для чайников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Полагаю есть ограничение? Уж не 255 ли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба Полагаю есть ограничение? Уж не 255 ли? Локальный буфер выделяется на стеке, еще здоровый кусок от него может откусить sprintf. Ограничение определяется размером стека и только. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться