Функция sprintf вызывает сбой на Windows 10 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Год не лазил в код (программа для специфических расчетов создана). Изменилась лишь операционная система Winda10 сейчас. Год назад на win7 работало, хотя и не помню уже может и раньше глюк был, я тогда что-то изменил и не сохранил, а сейчас уже все забыл и туплю на ровном месте... Но сейчас все вылетает на sprintf(st,"%f",r_ans); в коде
    void getScale (int id, char *st)
    {
        double r_ans;
        switch (id)
        {
            case 0: r_ans=t_min_scale; break;
            case 1: r_ans=t_1; break;
            case 2: r_ans=t_2; break;
            case 3: r_ans=t_3; break;
            default: r_ans=t_max_scale;
        }
        sprintf(st,"%f",r_ans);
    }
Вызов такой.
char tm_sc[6];
tpr->getScale(4,tm_sc);
Давно не писал кода, глаз замылен, что я не вижу? почему sprintf(st,"%f",r_ans) вызывает сбой?

Решение задачи: «Функция sprintf вызывает сбой на Windows 10»

textual
Листинг программы
sprintf(st,"%lf",r_ans);

Объяснение кода листинга программы

  1. В функции используется библиотека стандартного ввода/вывода (stdio.h) для работы с консолью.
  2. Создается строка переменной типа char с именем st.
  3. В строку st записывается значение переменной r_ans с помощью функции sprintf.
  4. Функция sprintf используется для форматирования числового значения r_ans в виде строки с плавающей точкой.
  5. Значение переменной r_ans автоматически преобразуется в тип double при использовании в функции sprintf.
  6. Контроль за переполнением буфера в данном коде отсутствует, что может привести к уязвимости буфера при использовании в качестве аргумента функции sprintf.
  7. Значение переменной r_ans может быть получено из внешнего источника, что повышает риск выполнения вредоносного кода.
  8. Функция sprintf является уязвимой функцией, если ей передаются некорректные аргументы, что может привести к переполнению буфера и выполнению вредоносного кода.
  9. Значение переменной r_ans может быть некорректным, что может привести к некорректному форматированию строки и ошибке выполнения программы.
  10. В данном коде не предусмотрена обработка ошибок, что может привести к непредсказуемому поведению программы при возникновении ошибок.
  11. Значение переменной r_ans может быть очень большим, что может привести к переполнению буфера при форматировании в строку с помощью функции sprintf.
  12. В данном коде не предусмотрена проверка на достаточность памяти для форматирования строки, что может привести к переполнению буфера и ошибке выполнения программы.
  13. Функция sprintf может вызвать сбой на Windows 10, если ей передаются некорректные аргументы или значение переменной r_ans является очень большим.
  14. В данном коде не предусмотрена проверка на достаточность памяти для форматирования строки, что может привести к переполнению буфера и ошибке выполнения программы.
  15. Значение переменной r_ans может быть некорректным, что может привести к некорректному форматированию строки и ошибке выполнения программы.
  16. Функция sprintf является уязвимой функцией, если ей передаются некорректные аргументы, что может привести к переполнению буфера и выполнению вредоносного кода.
  17. В данном коде не предусмотрена обработка ошибок, что может привести к непредсказуемому поведению программы при возникновении ошибок.
  18. Значение переменной r_ans может быть очень большим, что может привести к переполнению буфера при форматировании в строку с помощью функции sprintf.
  19. В данном коде не предусмотрена проверка на достаточность памяти для форматирования строки, что может привести к переполнению буфера и ошибке выполнения программы.
  20. Функция sprintf может вызвать сбой на Windows 10, если ей передаются некорректные аргументы или значение переменной r_ans является очень большим.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5