Это часть моего кода (где max — число с плавающей запятой):
printf("noise level found: %f\n", max);
//Put into "String"
char var[21];
sprintf(var, "%f", max);
setenv("music_sync_soundcard_noise_level",var,1);
printf("noise level written\n");
Что производит вывод:
noise level found: 2410965368832.000000
Segmentation fault
В то время как некоторые строки ранее у меня почти такие же:
printf("test finished, offset is %f\n", *offset);
//Put into "String"
char var[20];
sprintf(var, "%f", *offset);
setenv("music_sync_soundcard_offset",var,1);
Который работает без проблем.
// РЕДАКТИРОВАТЬ: Изменен размер массива, к сожалению, проблема не устранена
setenv
со значением стека. - person sturcotte06   schedule 13.02.2020char var[64]
или[128]
должно быть более чем достаточно, и использование вашей памяти даже не будет мигать. - person yano   schedule 13.02.2020"%f"
--›"%e"
. (4 места) - person chux - Reinstate Monica   schedule 13.02.2020setenv
должно быть в порядке со значениями стека, поскольку он делает копии строк. (Сputenv
нужно быть осторожным, потому чтоputenv
хранит фактическое значениеchar *
.) - person Ian Abbott   schedule 13.02.2020char var[1 + 1 + DBL_MAX_10_EXP + 1 + 6 + 1]
и справиться со всемиdouble
с помощью"%f"
. - person chux - Reinstate Monica   schedule 13.02.2020double
, это лучшее решение. - person yano   schedule 13.02.2020snprintf
, чтобы, если буфер слишком мал, он усекался, а не разбивал стек... - person R.. GitHub STOP HELPING ICE   schedule 13.02.2020