[VS] vsnprintf по разному обрабатывает 0.0 в Release и Debug сборках
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 27.02.21 15:23
Оценка:
Обнаружил, что отладочная и релизная версия одной программы (откомпилирована в VS2015) возвращают различающиеся текстовые представления double 0.0.

Debug   : 0.0000000000000000 (18 символов)
Release : 0.000000000000000  (17 символов)

Оказалось, что проблема в vsnprintf.

Накатал небольшую демку, идентичную коду той программы, и собрал её в VS2015, VS2017, VS2019.
  Вот
////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdarg.h>

#include <iostream>

//------------------------------------------------------------------------
int SNPRINTF(char* buffer, size_t count, const char* format...)
{
 va_list args;

 va_start(args, format);

 const int rc = vsnprintf(buffer, count, format, args);

 buffer[count - 1] = 0;

 va_end(args);

 return rc;
}//snprintf

//------------------------------------------------------------------------
int main()
{
 int precision=16;

 double d=0.0;

 int width=23;

 char temp[50];
 
 const char num_format[]="%- #*.*g";

 int rc=SNPRINTF(temp,sizeof(temp),num_format,width,precision,d);

 using namespace std;

 cout<<"["<<rc<<"]\""<<temp<<"\""<<endl;

 return 0;
}//main

////////////////////////////////////////////////////////////////////////////////

Проблема(?) наблюдается во всех трех случаях.

  Результаты запуска
>call bin\vs2015-Win32-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000    "

>call bin\vs2015-Win32-Release\ConsoleApplication1.exe
[23]" 0.000000000000000     "

>call bin\vs2015-x64-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000    "

>call bin\vs2015-x64-Release\ConsoleApplication1.exe
[23]" 0.000000000000000     "

>call bin\vs2017-Win32-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000    "

>call bin\vs2017-Win32-Release\ConsoleApplication1.exe
[23]" 0.000000000000000     "

>call bin\vs2017-x64-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000    "

>call bin\vs2017-x64-Release\ConsoleApplication1.exe
[23]" 0.000000000000000     "

>call bin\vs2019-Win32-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000    "

>call bin\vs2019-Win32-Release\ConsoleApplication1.exe
[23]" 0.000000000000000     "

>call bin\vs2019-x64-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000    "

>call bin\vs2019-x64-Release\ConsoleApplication1.exe
[23]" 0.000000000000000     "
Что за ботва, Пендальф?

Это ошибка в реализации vsnprintf или я чего не догоняю
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.