Microsoft特定的_sntscanf_s函数行为异常

时间:2017-04-28 12:04:06

标签: c windows visual-studio-2015

我不太确定Microsoft特定的_sntscanf_s函数应该如何工作。

在我的Visual Studio 2015(14.0.25431.01 Update 3)中,使用 v140 工具包编译的以下程序的输出是:

  

23.00000
  转换字段1

IMO哪个错误,而 v120 工具包的输出是:

  

0.00000
  转换字段1

哪个是正确的IMO。

#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
  TCHAR szBuffer[10];

  szBuffer[0] = _T('0');
  szBuffer[1] = _T('\0');
  szBuffer[2] = _T('2');   // replace '2' by '\0' and it works as expected
  szBuffer[3] = _T('3');
  szBuffer[4] = _T('\0');
  szBuffer[5] = _T('\0');

  double d;
  int conv = _sntscanf_s(szBuffer, _countof(szBuffer), _T("%lf"), &d);
  printf("%f\n", d);
  printf("Converted fields %d\n", conv);
  return 0;
}

根据该计划中的评论,如果您将szBuffer[2] = '2';替换为szBuffer[2] = '\0';,则按预期工作(输出:0.00000)。

如果这一行:

int conv = _sntscanf_s(szBuffer, _countof(szBuffer), _T("%lf"), &d);

替换为:

int conv = _sntscanf_s(szBuffer, _tcslen(szBuffer), _T("%lf"), &d);

无论工具包如何,输出始终为0.00000

对我而言,这看起来像一个错误。据我了解,扫描应该在遇到的第一个NUL字符处停止。

还有其他人遇到过这个问题吗?

0 个答案:

没有答案