Недостаточный размер буфера: неопределенное поведение (UB). Этот UB может отображаться в местах, далеких от исходного UB.
Улучшение кода путем написания кода, который не будет переполнять буфер - везде и для всех значений.
Обеспечить достаточный буфер для все max
#include <float.h>
float max;
// char var[21];
char var[1 + 1+FLT_MAX_10_EXP + 1 + 6 + 1];
// - d dddddddddd dddddddddd dddddddddd dddddddd . fraction \0
sprintf(var, "%f", max);
Используйте snprint()
, чтобы избежать переполнения буфера @ R ..
// sprintf(var, "%f", max);
snprintf(var, sizeof var, "%f", max);
Надежный код проверяет возвращаемое значение:
int len = snprintf(var, sizeof var, "%f", max);
if (len < 0 || (unsigned) len >= sizeof var) Oops();
Используйте "%e"
, чтобы справляться с большими и малыми значениями с плавающей запятой и хорошо представлять их
Используйте экспоненциальную запись, чтобы избежать больших буферов. Используйте достаточную точность.
char var[1 + 1 + 1 + FLT_DECIMAL_DIG-1 + 1 + 1 + 4 + 1];
// - d . dddddddd e - expo \0
sprintf(var, sizeof var, "%.*e", FLT_DECIMAL_DIG-1, max);