ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
963544 Топик полностью
RxTx (09.12.2019 16:10, просмотров: 400) ответил Evgeny_CD на А вызов одной и той же функции в иерархии вызовов несколько раз - многопоточность в однопоточном приложении. И если эта функция не реентерабельна, то вылет.
Ну ты же понял что там происходит. sprintf() ожидает что её %s параметр (его char* буфер) имеет ожидаемую ей длину.  А если она сама печатает в тот же параметр-буфер, длина строки в нем начинает расти. В итоге, растет и фактическая длина строки в буфере передаваемом как параметр. А должна быть фиксированная. И это приводит к проблемам. А если ты подумал что вот это вот: char* call_other_contained_sprintf() { sprintf(...); } sprintf("%s %s", call_other_contained_sprintf(), call_other_contained_sprintf() ); Как мультитаск, вложенно дёргает sprintf() то нет, потому что параметры функции вычисляются перед её вызовом. call_other_contained_sprintf() вызовутся друг за другом и ДО того как будет позван sprintf() их содерожащий.