Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
微软特有的sntscanf功能运行异常_C_Windows_Visual Studio 2015 - Fatal编程技术网

微软特有的sntscanf功能运行异常

微软特有的sntscanf功能运行异常,c,windows,visual-studio-2015,C,Windows,Visual Studio 2015,我不太确定特定于Microsoft的功能应该如何工作 在我的Visual Studio 2015(14.0.25431.01更新3)上,使用v140工具包编译的以下程序的输出为: 23.00000 转换字段1 这在IMO中是错误的,而对于v120工具包,输出是: 0.00000 转换字段1 在我看来,这是正确的 #include <tchar.h> #include <stdio.h> #include <stdlib.h> int _tmain(int a

我不太确定特定于Microsoft的功能应该如何工作

在我的Visual Studio 2015(14.0.25431.01更新3)上,使用v140工具包编译的以下程序的输出为:

23.00000
转换字段1

这在IMO中是错误的,而对于v120工具包,输出是:

0.00000
转换字段1

在我看来,这是正确的

#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;
}
替换为:

int conv = _sntscanf_s(szBuffer, _tcslen(szBuffer), _T("%lf"), &d);
无论使用何种工具包,输出总是
0.00000

对我来说,这看起来像一只虫子。据我所知,扫描应该在遇到第一个NUL字符时停止


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

这可能无关紧要,但是给
TCHAR
赋值的正确方法是使用
\t('c')
\u TEXT('c')
。另外,您使用的是哪种风格的
TCHAR
,UNICODE还是ANSI?@IanAbbott关于正确分配字符文字的方法,您是对的。是的,事实上这并不重要。我使用的是UNICODE风格,但问题与ANSI风格相同。看起来像-->“问题是它看到0并查找未找到的“X”,然后尝试推回未得到推回的“\0”(…),然后得到下一个字符,即“\0”之外的字符(错误)@看起来很接近这个问题的笨蛋。也许迈克尔在考验我们@IanAbbott这么说是一个dupe,但dupe不在现场?这可能无关紧要,但为
TCHAR
分配字符文字值的正确方法是使用
\t('c')
\u TEXT('c')
。另外,您使用的是哪种风格的
TCHAR
,UNICODE还是ANSI?@IanAbbott关于正确分配字符文字的方法,您是对的。是的,事实上这并不重要。我使用的是UNICODE风格,但问题与ANSI风格相同。看起来像-->“问题是它看到0并查找未找到的“X”,然后尝试推回未得到推回的“\0”(…),然后得到下一个字符,即“\0”之外的字符(错误)@看起来很接近这个问题的笨蛋。也许迈克尔在考验我们@IanAbbott这么说是个傻瓜,但这个傻瓜不在现场?
int conv = _sntscanf_s(szBuffer, _tcslen(szBuffer), _T("%lf"), &d);